这是一个关于自定义 Hibernate SequenceGenerator 的问题。
我有一个应用程序(Spring 3.1/Hibernate 4),它必须与 Oracle 和 SQLServer 的两个旧数据库一起使用。我遇到了 ID 生成器的问题。
在我的实体中,我将 ID 生成器策略注释为 AUTO,这样当它与 Oracle 一起使用时,它默认选择 SequenceGenerator,而当与 SQLServer 一起使用时,它默认选择 IdentityGenerator。它可以毫无问题地与 SQLServer 一起使用。但是对于 Oracle,hibernate 使用硬编码的“hibernate_sequence”作为默认序列名称。这会导致问题,因为旧版 Oracle 数据库使用约定 TableName+"_SEQ" 作为每个表的序列名称。
我设法通过更改 Hibernate SequenceGenerator 源代码并构建自己的休眠代码库来解决这个问题。但这不太可取,因为我们在升级 Hibernate 时必须记住这一点。
我还尝试编写自己的 ID 生成器(并用它注释 ID 字段)在 SequenceGenerator/IDGenerator 之间切换但失败了。无论如何,这也不是可取的方式,因为这需要进一步深入 JPA/Hibernate 框架内部,而我对此犹豫不决。
我想要的是编写我的 CustomizedSequenceGenerator 并以某种方式覆盖 Hibernate 通过配置使用的那个。但我可以找到“不知何故”。
有没有人有这样的经历?
谢谢,西蒙