Eclipse 用于测试和生产的JPA资源
我有两个基于maven项目的典型持久性文件Eclipse 用于测试和生产的JPA资源,eclipse,maven,jpa,Eclipse,Maven,Jpa,我有两个基于maven项目的典型持久性文件 src/main/resources/persistence.xml(JNDI) src/test/resources/persistence.xml(本地资源) eclipse和maven都无法在测试运行时向junit提供该功能,因为我的测试失败。作为最后手段,请尝试使用以下命令强制复制: ... maven资源插件 3.0.2 复制资源 验证 复制资源 ${project.build.directory} src/***.xml/direct
- src/main/resources/persistence.xml(JNDI)
- src/test/resources/persistence.xml(本地资源)
eclipse和maven都无法在测试运行时向junit提供该功能,因为我的测试失败。作为最后手段,请尝试使用以下命令强制复制:
...
maven资源插件
3.0.2
复制资源
验证
复制资源
${project.build.directory}
src/***.xml/directory>
真的
...
...
未测试。作为最后手段,请尝试使用以下命令强制复制:
...
maven资源插件
3.0.2
复制资源
验证
复制资源
${project.build.directory}
src/***.xml/directory>
真的
...
...
未测试。正如我在评论中解释的,我相信问题出在maven插件上。如果可能的话,尝试使用
maven-surefire-plugin
而不是maven-failsafe-plugin
。但是,即使您让它使用第二个persistence.xml
,在维护时也会遇到不同的问题(至少在Hibernate 5.2中是这样)。它不会从主要源中检测带注释的类,而只从测试中检测,您必须用
标记列出它们,并且每次都不要忘记这样做。我发现对我有效的解决方案是只使用主xml并实例化我的EntityManagerFactory
,如下所示:
@BeforeClass
public static void initJpa() throws Exception {
TreeMap<String, Object> props = new TreeMap<>();
props.put("javax.persistence.jdbc.driver", "org.postgresql.Driver");
props.put("javax.persistence.jdbc.url", "jdbc:postgresql://127.0.0.1:5432/projectdb");
props.put("javax.persistence.jdbc.user", "testuser");
props.put("javax.persistence.jdbc.password", "testpass");
props.put("javax.persistence.nonJtaDataSource", null); // important to override the data-source!
emf = Persistence.createEntityManagerFactory("persistance.unit.name", props);
}
@BeforeClass
public static void initJpa()引发异常{
TreeMap props=新的TreeMap();
put(“javax.persistence.jdbc.driver”、“org.postgresql.driver”);
put(“javax.persistence.jdbc.url”,“jdbc:postgresql://127.0.0.1:5432/projectdb");
put(“javax.persistence.jdbc.user”、“testuser”);
put(“javax.persistence.jdbc.password”、“testpass”);
put(“javax.persistence.nonJtaDataSource”,null);//覆盖数据源很重要!
emf=Persistence.createEntityManagerFactory(“Persistence.unit.name”,props);
}
javax.persistence.nonJtaDataSource
属性是最后的诀窍
这应该绕过您遇到的类加载覆盖问题。正如我在评论中解释的,我相信问题出在maven插件中。如果可能的话,尝试使用
maven-surefire-plugin
而不是maven-failsafe-plugin
。但是,即使您让它使用第二个persistence.xml
,在维护时也会遇到不同的问题(至少在Hibernate 5.2中是这样)。它不会从主要源中检测带注释的类,而只从测试中检测,您必须用
标记列出它们,并且每次都不要忘记这样做。我发现对我有效的解决方案是只使用主xml并实例化我的EntityManagerFactory
,如下所示:
@BeforeClass
public static void initJpa() throws Exception {
TreeMap<String, Object> props = new TreeMap<>();
props.put("javax.persistence.jdbc.driver", "org.postgresql.Driver");
props.put("javax.persistence.jdbc.url", "jdbc:postgresql://127.0.0.1:5432/projectdb");
props.put("javax.persistence.jdbc.user", "testuser");
props.put("javax.persistence.jdbc.password", "testpass");
props.put("javax.persistence.nonJtaDataSource", null); // important to override the data-source!
emf = Persistence.createEntityManagerFactory("persistance.unit.name", props);
}
@BeforeClass
public static void initJpa()引发异常{
TreeMap props=新的TreeMap();
put(“javax.persistence.jdbc.driver”、“org.postgresql.driver”);
put(“javax.persistence.jdbc.url”,“jdbc:postgresql://127.0.0.1:5432/projectdb");
put(“javax.persistence.jdbc.user”、“testuser”);
put(“javax.persistence.jdbc.password”、“testpass”);
put(“javax.persistence.nonJtaDataSource”,null);//覆盖数据源很重要!
emf=Persistence.createEntityManagerFactory(“Persistence.unit.name”,props);
}
javax.persistence.nonJtaDataSource
属性是最后的诀窍
这应该绕过您遇到的类加载覆盖问题。它应该在META-INF下,而不是在根目录下。失败的可能不是Eclipse。其他人报告说,使用maven failsafe插件启动的测试不会将
目标/测试类
放在目标/类
前面的类路径中,因为它应该覆盖META-INF/persistence.xml
(顺便说一句,它应该在META-INF中,而不是根目录中)。我使用maven surefire插件运行测试,并加载了正确的persistence.xml
。如何加载persistence.xml文件?通过类路径?它应该在META-INF下,而不是根目录下。失败的可能不是Eclipse。其他人报告说,使用maven failsafe插件启动的测试不会将目标/测试类
放在目标/类
前面的类路径中,因为它应该覆盖META-INF/persistence.xml
(顺便说一句,它应该在META-INF中,而不是根目录中)。我使用maven surefire插件运行测试,并加载了正确的persistence.xml
。如何加载persistence.xml文件?通过类路径?