Java 使用<;引用JPA persistence.xml中的JAR文件时出错;jar文件>;
我们有一个JavaEE项目,由多个JAR组成,其中几个包含实体。应用程序打包为具有以下结构的EAR:Java 使用<;引用JPA persistence.xml中的JAR文件时出错;jar文件>;,java,hibernate,jpa,Java,Hibernate,Jpa,我们有一个JavaEE项目,由多个JAR组成,其中几个包含实体。应用程序打包为具有以下结构的EAR: app.ear lib/core.jar (containing META-INF/persistence.xml) lib/module1.jar (contains entities) lib/module2.jar (contains entities) ... 在persistence.xml中,我们尝试引用包含以下实体的JAR文件: <persi
app.ear
lib/core.jar (containing META-INF/persistence.xml)
lib/module1.jar (contains entities)
lib/module2.jar (contains entities)
...
在persistence.xml中,我们尝试引用包含以下实体的JAR文件:
<persistence ...>
<persistence-unit name="someName">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jar-file>module1.jar</jar-file>
<jar-file>module2.jar</jar-file>
...
</persistence-unit>
</persistence>
org.hibernate.jpa.HibernatePersistenceProvider
模块1.jar
module2.jar
...
我看了一下(也在中引用),我的配置应该是正确的,对吗?我们的设置对应于JPA规范第8.2.1.6.3节中的示例2。但是,当我部署应用程序时,会收到以下错误消息:
java.lang.IllegalArgumentException: File [module1.jar] referenced by given URL [file:module1.jar] does not exist
at org.hibernate.jpa.boot.archive.internal.StandardArchiveDescriptorFactory.buildArchiveDescriptor(StandardArchiveDescriptorFactory.java:73)
at org.hibernate.jpa.boot.archive.internal.StandardArchiveDescriptorFactory.buildArchiveDescriptor(StandardArchiveDescriptorFactory.java:48)
at org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.buildArchiveDescriptor(AbstractScannerImpl.java:95)
at org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:63)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.scan(EntityManagerFactoryBuilderImpl.java:723)
at org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.<init>(EntityManagerFactoryBuilderImpl.java:219)
at org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:51)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:182)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:131)
at org.hibernate.ejb.HibernatePersistence.getEntityManagerFactoryBuilderOrNull(HibernatePersistence.java:93)
at org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:88)
at org.hibernate.ejb.HibernatePersistence.getEntityManagerFactoryBuilderOrNull(HibernatePersistence.java:101)
at org.hibernate.jpa.HibernatePersistenceProvider.createEntityManagerFactory(HibernatePersistenceProvider.java:69)
... 114 more
java.lang.IllegalArgumentException:给定URL[File:module1.jar]引用的文件[module1.jar]不存在
位于org.hibernate.jpa.boot.archive.internal.StandardArchiveDescriptorFactory.buildArchiveDescriptor(StandardArchiveDescriptorFactory.java:73)
位于org.hibernate.jpa.boot.archive.internal.StandardArchiveDescriptorFactory.buildArchiveDescriptor(StandardArchiveDescriptorFactory.java:48)
位于org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.buildArchiveDescriptor(AbstractScannerImpl.java:95)
位于org.hibernate.jpa.boot.scan.spi.AbstractScannerImpl.scan(AbstractScannerImpl.java:63)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl.scan(EntityManagerFactoryBuilderImpl.java:723)
位于org.hibernate.jpa.boot.internal.EntityManagerFactoryBuilderImpl。(EntityManagerFactoryBuilderImpl.java:219)
位于org.hibernate.jpa.boot.spi.Bootstrap.getEntityManagerFactoryBuilder(Bootstrap.java:51)
位于org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilder(HibernatePersistenceProvider.java:182)
在org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderRonull(HibernatePersistenceProvider.java:131)
位于org.hibernate.ejb.HibernatePersistence.getEntityManagerFactoryBuilderOrNull(HibernatePersistence.java:93)
在org.hibernate.jpa.HibernatePersistenceProvider.getEntityManagerFactoryBuilderOrNull(HibernatePersistenceProvider.java:88)
位于org.hibernate.ejb.HibernatePersistence.getEntityManagerFactoryBuilderOrNull(HibernatePersistence.java:101)
在org.hibernate.jpa.HibernatePersistenceProvider.createEntityManager工厂(HibernatePersistenceProvider.java:69)
... 114多
我也尝试过其他路径,例如lib/module1.jar,但结果总是一样的。如果有必要,我们将使用Hibernate 4.3.5.Final。有什么好处
更新:
显然,这是Hibernate中的一个古老错误:。有人对此有很好的解决方法吗?从他们的Jira判断,这个问题短期内不会得到解决。你找到解决办法了吗。我也面临同样的问题。你使用的是什么Hibernate版本?已在5.0.7中关闭,因此如果您使用的是较低版本,则可以尝试更新到该版本。我们通过为Hibernate制作一个补丁来解决这个问题;我们仍在使用此修补程序。我们也对它提出了拉取请求,但它在所有环境中都不起作用,因此被拒绝。后来,Hibernate团队自行修复了这个bug。所以我想说,你最好选择最新版本的Hibernate。