天天看點

Persistence 與HibernatePersistence詳解

javax.persistence.Persistence暴露出來了兩個方法:

public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName)
public static EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map properties)  
這兩個方法會在classpath對應的路徑下查找 META-INF/services/javax.persistence.spi.PersistenceProvider 這個資源,然後讀取内容。
這個資源存放的是一個PersistenceProvider接口的一個實作類的完整類名。
然後執行個體通過反射執行個體化這個實作類,然後執行其 createEntityManagerFactory,然後傳回該方法的執行結果。

org.hibernate.ejb.HibernatePersistence 中隻有兩個方法:

public EntityManagerFactory createEntityManagerFactory(String persistenceUnitName, Map overridenProperties)
public EntityManagerFactory createContainerEntityManagerFactory(PersistenceUnitInfo info, Map map)
這兩個方法内部都會執行個體化一個Ejb3Configuration的執行個體,然後調用其configure方法。然後執行這個對象的buildEntityManagerFactory方法,并傳回這個方法的執行結果。
這個configure方法内部會讀取classpath對應目錄下的META-INF下的persistence.xml檔案,這裡是寫死的,是以路徑和檔案名都不能改變。
部分源碼如下: