私もこの問題に苦労しています。PersistenceUnitInfo
コンテナー (つまり、アプリケーション サーバー) によって提供される必要があると思います。これは、Eclipselink 自体が作成しないことを意味します。Spring ORM を使用している場合は、 を使用し、そのメソッドをDefaultPersistenceUnitManager
呼び出してのインスタンスを取得します。unitName は で定義する必要があります。これは、まだ xml ファイルが必要であることを意味します。obtainPersistenceUnitInfo(String unitName)
PersistenceUnitInfo
persistence.xml
Spring ORM のソース コードを掘り下げることで、Spring が のいくつかの実装を提供していることがわかりましたPersistenceUnitInfo
。実際、それらは一般に Java Bean です。SmartPersistenceInfo
、MutablePersistenceInfo
およびに興味があるかもしれませんSpringPersistenceUnitInfo
。Githubでそれらを表示します。
編集:
Eclipselink の実装を見つけました: にSEPersistenceUnitInfo
ありorg.eclipse.persistence.internal.jpa.deployment
ます。また、構成 xml ファイル内のすべての持続性ユニットを読み取るメソッドも見つかりました。
public static Set<SEPersistenceUnitInfo> getPersistenceUnits(ClassLoader loader, Map m, List<URL> jarFileUrls) {
String descriptorPath = (String) m.get(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML);
if(descriptorPath == null) {
descriptorPath = System.getProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML_DEFAULT);
}
Set<Archive> archives = findPersistenceArchives(loader, descriptorPath, jarFileUrls);
Set<SEPersistenceUnitInfo> puInfos = new HashSet();
try {
for(Archive archive : archives) {
List<SEPersistenceUnitInfo> puInfosFromArchive = getPersistenceUnits(archive, loader);
puInfos.addAll(puInfosFromArchive);
}
} finally {
for(Archive archive : archives) {
archive.close();
}
}
return puInfos;
}