在jpa.properties.hibernate.id.new_generator_mappings:true时使用不推荐的[org.hibernate.id.SequenceGenerator]和唯一的constratint违规

时间:2017-04-03 07:43:55

标签: hibernate jpa

升级到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",时,我会遇到唯一的约束违规错误

1 个答案:

答案 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并引用其javadocSequenceHiLoGenerator因此,在创建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的方式不同,我得到了唯一的约束违规错误。