我想在生产MySQL系统中为主键使用GenerationType.IDENTITY。但对于本地开发和测试,我想使用HSQLDB。问题在于HSQLDB不支持GenerationType.IDENTITY(至少在Eclipselink中)。我试着设置了GenerationType.AUTO,它默认为HSQLDB的TABLE,但不幸的是它对MySQL也是如此,这不是我想要的。有什么方法可以在persistence.xml中覆盖这个吗?是否还有其他一些技巧我可以使用,以便每个环境都能做正确的事情?我没有在XML中设置任何实体配置(全部在注释中),我不想改变它,所以我正在寻找一种避免这种情况的方式。为测试/生产支持不同的JPA GenerationTypes
4
A
回答
2
这里的基本思想是使用一个自定义生成器,它可以根据元数据信息在标识和表(或者其他需要的其他策略)之间进行内部切换。
但是,使用标准JPA无法执行此操作。虽然@GeneratedValue
注释确实定义了generator
参数,它使您能够specify a custom generator它不提供任何写入机制(只允许您使用内置的表/序列生成器)。
这取决于特定的JPA提供程序是否(不)实现此功能。关于如何定义自定义生成器的EclipseLink wiki has an example。您需要修改它以在内部创建TableSequence
/NativeSequence
实例,并根据session.getPlatform()
在两者之间切换。
声明:我还没有尝试过使用EclipseLink的上述;不过,我在Hibernate中做了一些非常类似的事情。
1
HSQLDB显然本身支持IDENTITY列(绝对在v1.8中),所以这是EclipseLink中的一个缺陷。例如,DataNucleus为HSQLDB提供了IDENTITY支持。
正如您清楚地知道的那样,指定使用XML对于跨数据存储库部署有好处。
相关问题
- 1. Django的支持生产
- 2. nunit-console测试从不同位置产生不同的结果
- 3. 测试,如果浏览器支持“乘”为globalCompositeOperation帆布财产
- 4. 为什么maven不支持jpa 2.0?
- 5. Spring Data Jpa不支持Groupby
- 6. UWP不支持的测试版版本?
- 7. 重置JPA测试之间产生的值
- 8. 用于测试和生产的JPA资源
- 9. 如何支持测试Facebook身份验证的不同阶段
- 10. Android测试支持库未找到Espresso和不同的BuildVariants
- 11. jQuery的 - 财产不支持
- 12. 搜索同名“测试产品”和“测试产品”的产品
- 13. 如何使用javascript支持测试senario并且不支持javascript?
- 14. Spring测试-MVC PUT不支持
- 15. 不支持瓶测试信号错误
- 16. Solr支持不同类型产品的不同刻面
- 17. JS测试:目标支持
- 18. 测试是否支持Three.js
- 19. Play商店:Beta测试和生产APK不同的证书
- 20. 不同于测试和生产环境的开发环境?
- 21. Rails的“子环境” - 仍然生产(或测试等),但不同
- 22. 测试和生产环境之间的数据不同
- 23. 生产模式下的Creative SDK支持
- 24. 需要支持,产生使用StringBuilder的
- 25. 测试客户端不支持WCF服务合同
- 26. 为什么Junit测试仅支持不完整的覆盖叉?
- 27. 匕首不产生组件/测试类
- 28. 测试Akka流不产生值
- 29. 针对不同阶段有不同的initial_data灯具(测试诉生产)
- 30. 单元测试JPA /持久性通用
有趣。我会向Eclipselink人员提出问题。这肯定会让事情变得更简单。 – Tim 2009-11-09 16:27:19