2

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

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

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

4

3 回答 3

5

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

通过深入研究 Spring ORM 的源代码,我发现 Spring 提供了几种PersistenceUnitInfo. 事实上,它们通常是一个 Java Bean。您可能对SmartPersistenceInfoMutablePersistenceInfo感兴趣SpringPersistenceUnitInfo在Github上查看它们。

编辑:

我找到了 Eclipselink 的实现:它SEPersistenceUnitInfoorg.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;
}
于 2013-12-04T13:21:03.110 回答
1

Java EE 平台规范 6 说:容器负责查找 persistence.xml,将信息压缩为 PersistenceUnitInfo,并通过调用 createContainerEntityManagerFactory 提供该信息。

于 2015-08-05T00:56:19.970 回答
0

PersistenceUnitInfo 由 Spec 定义,具体实现请参考 JPA 规范代码或 JavaDoc。

http://www.eclipse.org/eclipselink/api/2.5/javax/persistence/spi/PersistenceUnitInfo.html

于 2013-07-02T14:37:47.620 回答