- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在开发一个将支持多个数据库引擎(Oracle、MSSQL、MySQL)的产品。对于 Oracle,我更愿意使用 Sequences 而不是 Sequence 表,以避免在大容量安装时出现潜在的并发和锁定问题,但其他数据库引擎不支持序列。此外,我更愿意为每个表使用一个序列而不是全局序列(例如 hibernate_sequence
),因此 @GeneratedValue(strategy = GenerationType.AUTO)
将不起作用.有没有办法在运行时动态选择策略?
最佳答案
实际上,Hibernate 使用其 org.hibernate.id.enhanced.SequenceStyleGenerator
解释 GenerationType.AUTO
和 GenerationType.SEQUENCE
。 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
关于java - 有没有办法使用 JPA 注释和 Hibernate 动态选择 @GeneratedValue 策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12737092/
我是一名优秀的程序员,十分优秀!