相关疑难解决方法(0)

Hibernate,@ SequenceGenerator和allocationSize

我们都知道Hibernate在使用时的默认行为@SequenceGenerator- 它将实际数据库序列增加1,将此值乘以50(默认allocationSize值) - 然后将此值用作实体ID.

这是不正确的行为,并与规范冲突说:

allocationSize - (可选)从序列中分配序列号时的增量.

要明确:我不打算生成ID之间的差距.

我关心的是与底层数据库序列不一致的 ID .例如:任何其他应用程序(例如使用普通JDBC)可能希望在从序列获取的ID下插入新行 - 但所有这些值可能已被Hibernate使用!疯狂.

有人知道这个问题的任何解决方案(没有设置allocationSize=1,从而降低性能)?

编辑:说
清楚.如果最后插入的记录具有ID = 1,则HB同时使用51, 52, 53...其新实体BUT的值:数据库中的序列值将设置为2.当其他应用程序使用该序列时,这很容易导致错误.

另一方面:规范说(根据我的理解)数据库序列应该被设置为51,同时HB应该使用范围中的值 2, 3 ... 50


更新:
正如Steve Ebersole在下面提到的:我可以通过设置启用我描述的行为(也是最直观的行为)hibernate.id.new_generator_mappings=true.

谢谢大家.

更新2:
对于未来的读者,您可以在下面找到一个有效的例子.

@Entity
@Table(name = "users")
public class User {

    @Id
    @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "USERS_SEQ")
    @SequenceGenerator(name = "USERS_SEQ", sequenceName = "SEQUENCE_USERS")
    private Long id;
}
Run Code Online (Sandbox Code Playgroud)

persistence.xml中

<persistence-unit name="testPU"> …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa hilo

109
推荐指数
2
解决办法
11万
查看次数

有没有办法使用JPA注释和Hibernate动态选择@GeneratedValue策略?

我正在研究一种支持多种数据库引擎(Oracle,MSSQL,MySQL)的产品.对于Oracle,我更喜欢使用Sequences而不是Sequence表来避免在高容量安装上出现潜在的并发和锁定问题,但其他数据库引擎不支持序列.此外,我更喜欢每个表使用一个序列而不是全局序列(例如hibernate_sequence),因此@GeneratedValue(strategy = GenerationType.AUTO)不起作用.有没有办法在运行时动态选择策略?

java database hibernate jpa

19
推荐指数
1
解决办法
2万
查看次数

从Hibernate 4.3.6迁移到Hibernate 5

我有一个旧项目,在该项目中我使用了Java API中的Date,并且要将其更改为新的Java 8 Date API LocalDateTime。我读到5之前的Hibernate版本不支持新的Java 8 Date API,因此我决定从Hibernate 4.3.6迁移到5。在旧项目版本中,一切正常,但是当我更改Hibernate版本时,出现错误我尝试启动我的应用程序:

    wrz 21, 2015 7:14:23 PM org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jre1.8.0_31\bin;C:\windows\Sun\Java\bin;C:\windows\system32;C:\windows;C:/Program Files/Java/jre1.8.0_31/bin/server;C:/Program Files/Java/jre1.8.0_31/bin;C:/Program Files/Java/jre1.8.0_31/lib/amd64;D:\oraclexe\app\oracle\product\11.2.0\server\bin;;C:\ProgramData\Oracle\Java\javapath;D:\oraclexe\app\oracle\product\11.2.0\server\bin;C:\Program Files (x86)\NVIDIA Corporation\PhysX\Common;C:\Program Files\Common Files\Microsoft Shared\Windows Live;C:\Program Files (x86)\Common Files\Microsoft Shared\Windows Live;C:\windows\system32;C:\windows;C:\windows\System32\Wbem;C:\windows\System32\WindowsPowerShell\v1.0\;C:\Program Files\WIDCOMM\Bluetooth Software\;C:\Program Files\WIDCOMM\Bluetooth Software\syswow64;C:\Program Files (x86)\Windows Kits\8.1\Windows Performance Toolkit\;C:\Program Files\Microsoft SQL Server\110\Tools\Binn\;C:\Program Files (x86)\Microsoft SDKs\TypeScript\1.0\;D:\Program Files\eclipse;;.
wrz 21, 2015 7:14:23 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
WARNING: …
Run Code Online (Sandbox Code Playgroud)

java spring jpa hibernate-4.x hibernate-5.x

6
推荐指数
1
解决办法
3686
查看次数

标签 统计

java ×3

jpa ×3

hibernate ×2

database ×1

hibernate-4.x ×1

hibernate-5.x ×1

hilo ×1

spring ×1