Persistence.xml 找不到 hbm.xml
Persistence.xml can't find hbm.xml
我有一个用于集成测试的 persistence.xml
文件,因此位于 src/test/resources/META-INF/
中。它看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="mysql-test"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.blabla.model.User</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="mysql" />
<property name="javax.persistence.jdbc.password" value="mysql" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:${db.port}/dbname" />
<property
name="javax.persistence.schema-generation.database.action" value="drop-and-create" />
<property name="javax.persistence.sql-load-script-source" value="data.sql" />
</properties>
</persistence-unit>
</persistence>
我在 com.blabla.model
中还有一个 User.hbm.xml
文件用于休眠 xml 映射。
当我尝试执行测试(位于 src/it/java/com.blabla/
文件夹中)时,出现以下错误:
java.lang.IllegalArgumentException: Unknown entity: com.blabla.model.User
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:808)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:789)
...
我认为问题与以下事实有关,即由于某些原因无法找到 hbm.xml
文件。因为如果我尝试移动:
将hbm.xml
文件复制到src/test/resources/META-INF/
文件夹下,一切正常。但是我不喜欢这个解决方案,因为我希望能够为需要访问相同 hbm.xml
文件的生产添加另一个 persistence.xml
。
persistence.xml
到src/main/resources/META-INF/
再次起作用。但这对我也不利,因为正如我所说,我希望我们能够为生产添加另一个持久性文件。
有什么想法吗?谢谢。
注意:我没有使用Spring引导。
最后我找到了一个似乎可以按我希望的方式工作的配置。我已定位:
persistence.xml
用于 src/test/resources/META-INF/
、 的测试
persistence.xml
在 src/main/resources/META-INF/
、 生产
-
hbm.xml
映射文件位于 src/main/resources/META-INF/
、
同样在测试和生产中 persistence.xml
我添加了 <mapping-file>
标签:
...
<persistence-unit name="persistence" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<mapping-file>/META-INF/User.hbm.xml</mapping-file>
<class>com.blabla.model.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
...
我有一个用于集成测试的 persistence.xml
文件,因此位于 src/test/resources/META-INF/
中。它看起来像这样:
<?xml version="1.0" encoding="utf-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"
version="2.0">
<persistence-unit name="mysql-test"
transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<class>com.blabla.model.User</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="com.mysql.cj.jdbc.Driver" />
<property name="javax.persistence.jdbc.user" value="mysql" />
<property name="javax.persistence.jdbc.password" value="mysql" />
<property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:${db.port}/dbname" />
<property
name="javax.persistence.schema-generation.database.action" value="drop-and-create" />
<property name="javax.persistence.sql-load-script-source" value="data.sql" />
</properties>
</persistence-unit>
</persistence>
我在 com.blabla.model
中还有一个 User.hbm.xml
文件用于休眠 xml 映射。
当我尝试执行测试(位于 src/it/java/com.blabla/
文件夹中)时,出现以下错误:
java.lang.IllegalArgumentException: Unknown entity: com.blabla.model.User
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:808)
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:789)
...
我认为问题与以下事实有关,即由于某些原因无法找到 hbm.xml
文件。因为如果我尝试移动:
将
hbm.xml
文件复制到src/test/resources/META-INF/
文件夹下,一切正常。但是我不喜欢这个解决方案,因为我希望能够为需要访问相同hbm.xml
文件的生产添加另一个persistence.xml
。persistence.xml
到src/main/resources/META-INF/
再次起作用。但这对我也不利,因为正如我所说,我希望我们能够为生产添加另一个持久性文件。
有什么想法吗?谢谢。
注意:我没有使用Spring引导。
最后我找到了一个似乎可以按我希望的方式工作的配置。我已定位:
persistence.xml
用于src/test/resources/META-INF/
、 的测试
persistence.xml
在src/main/resources/META-INF/
、 生产
-
hbm.xml
映射文件位于src/main/resources/META-INF/
、
同样在测试和生产中 persistence.xml
我添加了 <mapping-file>
标签:
...
<persistence-unit name="persistence" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<mapping-file>/META-INF/User.hbm.xml</mapping-file>
<class>com.blabla.model.User</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
...