나는 DeltaSpike 라이브러리에서 @Transactional을 사용하려고하는데, 몇 가지 문제가 있습니다. 어디 보자 :@Transactional DeltaSpike로 이미 생성 된 EntityManager 사용
1) 사용자 지정 한정자를 사용하여 EntityManager를 만드는 DAO 제작자가 있습니다.
@Inject @PersistenceUnit(value="myPU01")
private DAO dao;
생산자가 호출과의 EntityManager가 myPU01를 사용하여 만들어집니다 :
@Produces
@PersistenceUnitName(value="")
public DAO criar(InjectionPoint ip) {
String persistenceUnit = "";
EntityManager em = null;
for (Annotation annotation : ip.getQualifiers()) {
if (annotation instanceof PersistenceUnitName) {
persistenceUnit = ((PersistenceUnitName) annotation).value();
}
}
em = Persistence.createEntityManagerFactory(persistenceUnit).createEntityManager();
return new DAO(em);
}
지금은 다른 클래스에서 DAO를 주입 해요 상상. 그러나 DAO 클래스 안에 내가하는 방법은 저장하고 난 DeltaSpike lib 디렉토리에서 @Transactional을 사용하고 싶습니다 :
@Transactional
public void save(AbstractEntity entidade) {
em.persist(entidade);
em.flush();
}
문제는 여기에 살고있다. @Transactional은 다른 EntityManager를 만들려고 시도하지만 이미 myPU01로 생성 된 EntityManager를 가지고 있습니다. 나는 "save"옆에 persistenceUnitName을 넣을 수 없다.
생성 된 모든 객체에 대해 'Persistence.createEntityManagerFactory (persistenceUnit)'를 호출하는 것은 매우 나쁜 생각입니다. –