gpt4 book ai didi

java - 支持用于测试/生产的不同 JPA 生成类型

转载 作者:搜寻专家 更新时间:2023-11-01 03:14:47 25 4
gpt4 key购买 nike

我想在我的生产 MySQL 系统中使用 GenerationType.IDENTITY 作为主键。但是对于本地开发和测试,我更愿意使用HSQLDB。问题是 HSQLDB 不支持 GenerationType.IDENTITY(至少对于 Eclipselink)。我尝试设置 GenerationType.AUTO,对于 HSQLDB,它默认为 TABLE,但不幸的是,它对 MySQL 也是如此,这不是我想要的。有什么方法可以在 persistence.xml 中覆盖它吗?我可以使用其他一些技巧让每个环境都做正确的事吗?我没有在 XML 中设置任何实体配置(全部在注释中)并且我不想更改它,所以我正在寻找一种避免这种情况的方法。

最佳答案

这里的基本思想是使用一个自定义生成器,该生成器将根据元数据信息在身份和表(或您需要的任何其他策略)之间进行内部切换。

但是,使用标准 JPA 无法做到这一点。虽然 @GeneratedValue 注释确实定义了 generator 参数,使您能够 specify a custom generator它不提供任何编写机制(只允许您使用内置的表/序列生成器)。

由特定的 JPA 提供程序来(不)实现此功能。 EclipseLink 维基 has an example如何定义自定义生成器。您需要更改它以在内部创建 TableSequence/NativeSequence 实例并根据 session.getPlatform() 在两者之间切换.

免责声明:我还没有尝试使用 EclipseLink 进行上述操作;不过,我在 Hibernate 中做了非常相似的事情。

关于java - 支持用于测试/生产的不同 JPA 生成类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1689553/

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