2013-06-05 38 views
2

有沒有辦法創建EntityManagerFactory沒有定義的持久性單元?你能否提供所有必需的屬性來創建實體管理器工廠?我需要在運行時從用戶指定的值創建EntityManagerFactory。更新persistence.xml並重新編譯不是一種選擇。創建實體管理器工廠沒有persistence.xml

當前我正在使用eclipselink動態持久性所以我需要創建EntityManagerFactory沒有定義持久性單元?我有一些運行時實體組需要在運行時將單個實體組映射到不同的數據庫,並且沒有持久性單元條目可用於此運行時組實體。

關於如何做到這一點的任何想法都比歡迎!

回答

0

最好的選擇是最有可能直接訪問PersistenceProvider並使用EJB容器API從PersistenceUnitInfo創建EntityManagerFactory。

PersistenceProvider.createContainerEntityManagerFactory()

見, http://www.eclipse.org/eclipselink/api/2.5/org/eclipse/persistence/jpa/PersistenceProvider.html#createContainerEntityManagerFactory%28javax.persistence.spi.PersistenceUnitInfo,%20java.util.Map%29

+0

感謝您的答覆,祝你歸類PersistenceUnitInfo接口實現需要在createContain中傳遞的類erEntityManagerFactory()方法。 –

+0

Hello James Sutherland,您可以爲實現類PersistenceUnitInfo提供方向/示例鏈接,它需要在createContainerEntityManagerFactory()方法中作爲參數傳遞(包含持久性單元信息) –

+0

檢查JPA規範,它應該覆蓋PersistecneUnitInfo規範 – James

-2

剛剛看到DataNucleus文檔中:

import org.datanucleus.metadata.PersistenceUnitMetaData; 
import org.datanucleus.api.jpa.JPAEntityManagerFactory; 

PersistenceUnitMetaData pumd = new PersistenceUnitMetaData("dynamic-unit", "RESOURCE_LOCAL", null); 
pumd.addClassName("org.datanucleus.test.A"); 
pumd.setExcludeUnlistedClasses(); 
pumd.addProperty("javax.persistence.jdbc.url", "jdbc:h2:mem:nucleus"); 
pumd.addProperty("javax.persistence.jdbc.driver", "org.h2.Driver"); 
pumd.addProperty("javax.persistence.jdbc.user", "sa"); 
pumd.addProperty("javax.persistence.jdbc.password", ""); 
pumd.addProperty("datanucleus.autoCreateSchema", "true"); 

EntityManagerFactory emf = new JPAEntityManagerFactory(pumd, null); 

http://www.datanucleus.org/products/accessplatform_3_2/jpa/persistence_unit.html

+0

這是DataNucleus特有的,而不是通用的JPA。 – Thierry

相關問題