2013-06-05 5 views
2

지속성 유닛을 정의하지 않고 EntityManagerFactory를 생성하는 방법이 있습니까? 엔티티 관리자 팩토리를 생성하는 데 필요한 모든 속성을 제공 할 수 있습니까? 런타임에 사용자가 지정한 값으로 EntityManagerFactory를 생성해야합니다. persistence.xml을 업데이트하고 다시 컴파일하는 것은 옵션이 아닙니다.persistence.xml을 사용하지 않고 Entity Manager Factory 생성

현재 내가 사용하고 있습니다 eclipselink 동적 지속성 그래서 지속성 유닛을 정의하지 않고 EntityManagerFactory를 생성해야합니까? 런타임의 엔티티의 단일 그룹을 다른 데이터베이스에 매핑해야하는 런타임 엔티티 그룹이 있으며 런타임 엔티티 그룹에 대해 지속성 항목 항목을 사용할 수 없습니다.

어떻게하는지에 대한 아이디어는 환영합니다.

답변

0

가장 좋은 옵션은 PersistenceProvider에 직접 액세스하고 EJB 컨테이너 API를 사용하여 PersistenceUnitInfo에서 EntityManagerFactory를 생성하는 것입니다.

PersistenceProvider.createContainerEntityManagerFactory는()

참조, 그냥 DataNucleus 문서에서 볼 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

: 답장을 보내

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