我想在我的生产 MySQL 系统中使用 GenerationType.IDENTITY 作为主键。但是对于本地开发和测试,我想使用 HSQLDB。问题是 HSQLDB 不支持 GenerationType.IDENTITY (至少对于 Eclipselink)。我尝试设置 GenerationType.AUTO,它默认为 HSQLDB 的 TABLE,但不幸的是它对 MySQL 也是如此,这不是我想要的。有没有办法在persistence.xml中覆盖它?我可以使用其他一些技巧来让每个环境都做正确的事情吗?我没有在 XML 中设置任何实体配置(全部在注释中),我不想更改它,所以我正在寻找一种避免这种情况的方法。
问问题
1020 次
2 回答
2
这里的基本思想是使用自定义生成器,该生成器将根据元数据信息在身份和表(或您需要的任何其他策略)之间进行内部切换。
但是,使用标准 JPA 无法做到这一点。虽然@GeneratedValue
注释确实定义generator
了使您能够指定自定义生成器的参数,但它不提供任何编写机制(仅允许您使用内置的表/序列生成器)。
由特定的 JPA 提供者来(不)实现此功能。EclipseLink wiki有一个如何定义自定义生成器的示例。您需要更改它以在内部创建TableSequence
/NativeSequence
实例并基于session.getPlatform()
.
免责声明:我没有尝试过使用 EclipseLink 进行上述操作;不过,我在 Hibernate 中做了非常相似的事情。
于 2009-11-06T19:16:50.527 回答
1
HSQLDB 本身显然确实支持 IDENTITY 列(肯定在 v1.8 中),所以这是 EclipseLink 中的一个缺陷。例如,DataNucleus 为 HSQLDB 提供 IDENTITY 支持。
如您所知,使用 XML 指定有利于跨数据存储部署。
于 2009-11-07T12:04:48.000 回答