升级到Hibernate 5后,我收到错误-l
。我发现this answer有一个代码片段,提到如何解决问题。
我想知道该解决方案的工作原理。该代码段是否与Found use of deprecated [org.hibernate.id.SequenceGenerator]
注释完全相同?如果是这样,为什么@SequenceGenerator
已被弃用?
我的注释来自SequenceGenerator
包。我宁愿不在我的代码中添加特定于hibernate的东西。在我已经链接的答案中,javax.persistence
与hibernate相关(至少在运行时)。有没有办法实现这个目标?
当我设置strategy = "org.hibernate.id.enhanced.SequenceStyleGenerator",
时,我会遇到唯一的约束违规错误
答案 0 :(得分:6)
回答我自己的问题,
上面的弃用警告是因为Spring Boot 1.5设置
jpa.properties.hibernate.id.new_generator_mappings: false
。如果设置为true,Hibernate将在内部使用SequenceStyleGenerator
并且警告不会出现。
但是为了获得序列的下一个值而执行的逻辑会有所不同。
如果将上述设置设为false,则会使用org.hibernate.id.SequenceGenerator
,而这似乎不会使用allocationSize
的{{1}}参数。它将始终调用数据库以获取序列的下一个值。还有另一个@SequenceGenerator
并引用其javadoc,SequenceHiLoGenerator
因此,在创建Orcale序列时,这可以与An IdentifierGenerator that combines a hi/lo algorithm with an underlying oracle-style sequence that generates hi values.
一起使用,并且该生成器不会为每个数据库调用数据库插入
将上述设置设置为true,Hibernate默认使用PooledOptimizer
,它使用INCREMENT BY
参数。由于生成ID的方式不同,我得到了唯一的约束违规错误。