gpt4 book ai didi

jpa - EclipseLink 中的 PersistenceUnitInfo 实现

转载 作者:行者123 更新时间:2023-12-04 13:41:32 25 4
gpt4 key购买 nike

EntityManagerFactory 可以在没有持久化单元 xml 的情况下使用

org.eclipse.persistence.jpa.PersistenceProvider {
public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info,
java.util.Map properties)
}

但是javax.persistence.spi.PersistenceUnitInfo在eclipselink中的实现类是什么

最佳答案

我也在纠结这个问题。我认为 PersistenceUnitInfo 必须由容器(即应用程序服务器)提供。这意味着 Eclipselink 不会自行创建。如果您使用的是 Spring ORM,它会使用 DefaultPersistenceUnitManager 并调用其 obtainPersistenceUnitInfo(String unitName) 方法来获取 PersistenceUnitInfo 的实例。 unitName 必须在 persistence.xml 中定义。这意味着您仍然需要一个 xml 文件。

通过深入挖掘Spring ORM的源码,我发现Spring提供了几种PersistenceUnitInfo的实现。实际上它们一般都是一个Java Bean。您可能对 SmartPersistenceInfoMutablePersistenceInfoSpringPersistenceUnitInfo 感兴趣。在 Github 上查看它们.

编辑:

我在 org.eclipse.persistence.internal.jpa.deployment 中找到了 Eclipselink 的实现:它是 SEPersistenceUnitInfo。还找到了读取配置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;
}

关于jpa - EclipseLink 中的 PersistenceUnitInfo 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17379620/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com