0

Glassfish 3.1.2.2で実行されているEclipselink 2.4.1を使用して、JPA 2を使用してエンティティをMySQLデータベースに永続化するJAVE EE6プロジェクトがあります。

データを 2 つの別個のデータベースに格納しています。このために、2 つの JNDI JDBC リソースと 2 つの JDBC 接続プールがあります。コードには、以下に示すようにそれぞれ異なるエンティティを持つ 2 つの永続ユニットがあります (2 つの persistence.xml ファイルもあることに注意してください)。

プロジェクトの構造:

EAR
-EJBOne
--persistence.xml
--- PersistenceUnitA ----(クラス X のリスト
)
-EJBTwo
--persistence.xml
---PersistenceUnitA
----(クラス X + Z の​​リスト)
---PersistenceUnitB
- ---(クラス Y のリスト)
----(orm.xml)

<property name="eclipselink.ddl-generation" value="create-tables"/>すべての永続化ユニットを設定しました。設定もしまし<exclude-unlisted-classes>true</exclude-unlisted-classes>た。

何が起こっているかというと、展開時に PersistenceUnitB の orm.xml 内のすべてのエンティティが PersistenceUnitA のデータベースに (テーブルとして) 作成されているということです。試行錯誤の結果、このテーブル生成の原因は、EJBTwo の persitence.xml の PersistenceUnitA のプロパティ (つまり、両方の永続ユニットを持つ persistence.xml) にあることがわかりました。

ただし、それ以外の場合、アプリケーションは正しく実行され、指定された持続性ユニット内のエンティティのみが検索されます。つまり、unitName=PersistenceUnitB で EntityManager を使用すると、実際にエンティティが PersistenceUnitB のデータベースに格納されます。

PersistenceUnitB (クラス Y のリスト) に手動でリストされたクラス<class>name</class>は、PersistenceUnitA のデータベースでは生成されず、orm.xml 内のクラスのみが生成されます。

これはかなり面倒です。なぜこれが起こっているのかについて誰かが情報を持っていれば、それは素晴らしいことです.

ありがとう。

4

1 に答える 1

1

orm.xml は、両方の持続性ユニットに対してデフォルトで検索されます。ファイルの名前を変更して、明示的に PersistenceUnitB にリストしてみてください

于 2013-03-11T13:03:42.453 に答える