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 内のクラスのみが生成されます。
これはかなり面倒です。なぜこれが起こっているのかについて誰かが情報を持っていれば、それは素晴らしいことです.
ありがとう。