我有一个war应用程序,它使用在多个jar文件中定义的实体。在我的persistence.xml
中,我为每个jar定义了一个jar-file
标记,但是当应用程序启动时,这些jar中包含的实体没有加载。如果我使用"class"指定每个类标签一切正常
我确定为这些jar定义的相对路径是正确的,因为如果我改变它,我会得到错误:"HHH10000002:由URL [vfs:…]命名的文件或目录无法找到">
这是我的persistence.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2" xmlns="http://xmlns.jcp.org/xml/ns/persistence">
<persistence-unit name="custom-persistence-unit" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:jboss/jdbc/customdatasource</jta-data-source>
<jar-file>lib/firstJar.jar</jar-file>
<jar-file>lib/secondJar.jar</jar-file>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLInnoDBDialect"/>
<property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.SunONETransactionManagerLookup"/>
<property name="hibernate.connection.useUnicode" value="true"/>
<property name="hibernate.connection.characterEncoding" value="UTF-8"/>
<property name="hibernate.connection.charSet" value="UTF-8"/>
<property name="hibernate.transactionJtaPlatform" value="org.hibernate.service.jta.platform.internal.JBossAppServerJtaPlatform"/>
<property name="hibernate.archive.autodetection" value="class, hbm"/>
<property name="hibernate.implicit_naming_strategy" value="legacy-jpa"/>
</properties>
</persistence-unit>
</persistence>
我错过了什么吗?日志不包含任何错误或警告,看起来实体只是被忽略了。
尝试以以下方式纠正您的persistence.xml
:
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
version="2.2"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
...
</persistence>
正如JPA 2.2规范的8.2.1.6.3 Jar Files部分所述:
可以使用
jar-file
元素来指定一个或多个JAR文件,而不是使用mapping-file
元素中指定的映射文件。如果指定,将搜索这些JAR文件以查找托管持久化类,并处理在这些文件上找到的任何映射元数据注释,或者使用本规范定义的默认映射注释对它们进行映射。这样的JAR文件是相对于包含[91]的目录或JAR文件指定的,[92]是持久单元的根目录。[91]此语义适用于写入
persistence_2_0.xsd
或更高模式的persistence.xml
文件。由于Java Persistence 1.0规范中的模糊性,此元素所使用的相对引用的特定于提供程序的解释可能适用于更早的版本版本。[92]鼓励持久性提供程序支持这种语法,以便在Java SE环境中使用