2

持続性ユニットを定義し、その持続性ユニットをさまざまなコンポーネントで使用できる EAR Java アプリケーションが必要です。例: application.xml で 2 つの JAR を定義します: my-product.jar と my-product-module.jar - 両方の JAR ファイルが同じ PersistenceUnit で動作できる必要があります。この PersistenceUnit は、EAR アプリケーションの lib フォルダーである別の jar で定義されています。JAR ファイルには、他の persistence.xml はありません。したがって、EAR フォルダー全体で、persistence.xml は 1 つだけです。

現在、次の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 で) すべてのエンティティを検出するにはどうすればよいでしょうか? 私たちを助けてくれる人はいますか?

4

1 に答える 1

0

私たちの解決策は、@ Entityで注釈が付けられたすべてのクラスを取得するカスタムANTタスクを作成することでした(リフレクションを使用)。これにより、ノードを含むpersistence.xmlが生成されます。したがって、PersistenceContextにマップするすべてのクラスは、persistence.xmlにリストされている必要があります。このpersistence.xmlは、my-persistence.jarにラップされているMETA-INFフォルダー内に配置されます。このjarファイルは私のEARのlibフォルダーにあります。

于 2012-12-06T09:27:45.893 に答える