我需要一个 EAR java 应用程序,我可以在其中定义一个持久性单元并在不同的组件中使用该持久性单元。例如:我在 application.xml 中定义了 2 个 JAR:my-product.jar 和 my-product-module.jar - 这两个 JAR 文件应该能够使用相同的 PersistenceUnit。这个 PersistenceUnit 是在一个单独的 jar 中定义的,它是我的 EAR 应用程序的 lib 文件夹。在 JAR 文件中,没有其他 persistence.xml。所以在整个 EAR 文件夹中:只有 1 个 persistence.xml。
我目前有以下 EAR 结构。我们在 JBoss 6.1.0.Final 服务器上进行部署。
/
-- lib
| |
| -- my-persistence.jar
| |
| -- META-INF
| |
| -- persistence.xml
-- my-product.jar
|
-- my-product.war
|
-- my-product-module.jar
我的 persistence.xml 看起来像这样:
<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="MyPersistenceUnitName">
<jta-data-source>java:/MyDatasource</jta-data-source>
<jar-file>../my-product.jar</jar-file>
<jar-file>../my-product-module.jar</jar-file>
<properties>
<property name="jboss.entity.manager.factory.jndi.name" value="java:/MyProduct/ManagerFactory" />
<property name="jboss.entity.manager.jndi.name" value="java:/MyProduct/EntityManager" />
</properties>
</persistence-unit>
</persistence>
所有这些工作正常。持久性单元在 EAR 上下文中被检测和限定。但是,从我们创建 JPA 查询并要求 EntityManager 执行查询的那一刻起,我们收到以下错误:
org.hibernate.hql.ast.QuerySyntaxException: MyEntity is not mapped [from MyEntity]
因此,在加载应用程序时,我们所有的实体都没有被映射/检测到。似乎 jar-file 元素没有做它应该做的事情。
我们如何检测我们所有的实体(在我们的两个 JAR 中)?任何人都可以帮助我们吗?