gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 22:32:58 24 4
gpt4 key购买 nike

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

最佳答案

实际上,Hibernate 使用其 org.hibernate.id.enhanced.SequenceStyleGenerator 解释 GenerationType.AUTOGenerationType.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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com