我正在尝试进行一些 pax-exam-karaf 测试(hibernate 5.2.6、Pax-exam 4.9.2、ServiceMix 7.0.0M3),但我遇到了休眠方言的问题。在生产中,我们使用 PostgreSQL,但对于集成测试,我想使用 h2 数据库。我们的持久化 xml 包含
<property name="hibernate.dialect" value="${hibernate.dialect.value}"
在 Maven 父 POM 中,我们定义了
<hibernate.dialect.value>org.hibernate.dialect.PostgreSQLDialect</hibernate.dialect.value>
我已阅读此讨论http://karaf.922171.n3.nabble.com/Dynamic-parameters-in-persistence-xml-td4043602.html并在 Pax-Exam 配置代码中进行了尝试:
for (String persistenceUnit : persistenceUnits) {
puOptions.add(KarafDistributionOption.editConfigurationFilePut("etc/org.apache.aries.jpa." + persistenceUnit + ".cfg",
"hibernate.dialect", "org.hibernate.dialect.H2Dialect"));
}
所以我可以在 karaf/etc 目录中看到这些配置文件,但所有持久性捆绑包仍然具有在 persistence.xml 中指定的 hibernate.dialect。我也尝试将此文件之一复制到 servicemix 发行版,但结果相同,休眠方言仍然相同。
aries jpa 持久性配置文件的这个解决方案有问题吗?或者有没有其他方法可以改变persistence.xml的方言?
我知道我可以从persistence.xml 中删除休眠方言,但由于某些其他原因,我们不能这样做。我还发现我可以使用我自己的方言解析器(http://blog.exxeta.com/2016/03/23/dynamically-resolve-hibernate-database-dialect/)但我更喜欢配置方式是可能的。