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

Cla*_*lay 19 java database hibernate jpa

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

Ste*_*ole 32

实际上,Hibernate解释它们GenerationType.AUTOGenerationType.SEQUENCE使用它org.hibernate.id.enhanced.SequenceStyleGenerator.SequenceStyleGenerator是一种id生成策略,它根据底层数据库支持的内容选择两种策略之一.如果数据库支持序列,则SequenceStyleGenerator使用序列; 如果没有,SequenceStyleGenerator将回退到使用"序列表".要使用哪个生成器的"映射"由设置控制:hibernate.id.new_generator_mappings.将其设置为true可启用上述行为.不幸的是,出于向后兼容性的原因,我们不得不将其默认为false.因此,要利用这一点,您需要确保将设置设置为true.

此外,如果没有给出名称,您可以将SequenceStyleGenerator配置为首选全局序列或每个实体的序列.这由名为的设置控制prefer_sequence_per_entity

SequenceStyleGenerator通常是可配置的.有关更多信息,请查看其javadocs:http://docs.jboss.org/hibernate/orm/4.1/javadocs/index.html?org/hibernate/id/enhanced/ SequenceStyleGenerator.html

  • `@SequenceGenerator(...,allocationSize = blah)` (2认同)