persistence.xml 如下所示:
<persistence-unit name="testPU" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<non-jta-data-source>jdbc/test</non-jta-data-source>
<jar-file>../../lib/app-services-1.0.jar</jar-file>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
</persistence-unit>
它是一个Web项目,所以部署单元是一个war文件。 我尝试引用的 jar 文件位于 WEB-INF/lib/ 文件夹中,persistence.xml 位于 WEB-INF/classes/META-INF强> 文件夹。部署时,它只是告诉我
"WARNING: Unable to find file (ignored): file:.../../lib/app-services-1.0.jar".
我还尝试了我能想到的所有可能的路径,即../lib/app-services-1.0.jar、lib/app-services-1.0.jar>.
执行此操作的正确方法是什么?
最佳答案
看看 jsr 总是有效的!
8.2.1.6.3 Jar Files
One or more JAR files may be specified using the
jar-file
elements instead of, or in addition to the mapping files specified in themapping-file
elements. If specified, these JAR files will >be searched for managed persistence classes, and any mapping metadata annotations found on them will be pro-cessed, or they will be mapped using the mapping annotation defaults defined by this specification. Such JAR files are specified relative to the directory or jar file that contains the root of the persis-tence unit.The following examples illustrate the use of the
jar-file
element to reference additional persistence classes. These examples use the convention that a jar file with a name terminating in “PUnit” contains thepersistence.xml
file and that a jar file with a name terminating in “Entities” contains additional persistence classes.
Example 1:
app.ear
lib/earEntities.jar
earRootPUnit.jar (with META-INF/persistence.xml )
persistence.xml contains:
<jar-file>lib/earEntities.jar</jar-file>
Example 2:
app.ear
lib/earEntities.jar
lib/earLibPUnit.jar (with META-INF/persistence.xml )
persistence.xml contains:
<jar-file>earEntities.jar</jar-file>
Example 3:
app.ear
lib/earEntities.jar
ejbjar.jar (with META-INF/persistence.xml )
persistence.xml contains:
<jar-file>lib/earEntities.jar</jar-file>
Example 4:
app.ear
war1.war
WEB-INF/lib/warEntities.jar
WEB-INF/lib/warPUnit.jar (with META-INF/persistence.xml )
persistence.xml contains:
<jar-file>warEntities.jar</jar-file>
Example 5:
app.ear
war2.war
WEB-INF/lib/warEntities.jar
WEB-INF/classes/META-INF/persistence.xml
persistence.xml contains:
<jar-file>lib/warEntities.jar</jar-file>
Example 6:
app.ear
lib/earEntities.jar
war2.war
WEB-INF/classes/META-INF/persistence.xml
persistence.xml contains:
<jar-file>../../lib/earEntities.jar</jar-file>
Example 7:
app.ear
lib/earEntities.jar
war1.war
WEB-INF/lib/warPUnit.jar (with META-INF/persistence.xml )
persistence.xml contains:
<jar-file>../../../lib/earEntities.jar</jar-file>
如您所见,没有 war 文件的示例,上面示例中的所有 war 文件都在 Ear 文件内!
但是我在war文件中进行了测试,只有当我指定jar文件的绝对路径时它才有效,这对于生产环境来说不是一个好方法!
关于hibernate - 在 Web 应用程序中引用 jpa persistence.xml 中的 jar 文件的正确路径是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4433341/