我想通過DeltaSpike庫使用@Transactional,但我遇到了一些問題。讓我們看看:使用已使用@Transactional創建的EntityManager DeltaSpike
1)我有一個使用自定義限定符創建EntityManager的DAO生產者。
@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:
@Inject @PersistenceUnit(value="myPU01")
private DAO dao;
生產者被調用,使用myPU01創建EntityManager的。但DAO類中,我有一個方法保存,我想用@Transactional從DeltaSpike lib目錄下:
@Transactional
public void save(AbstractEntity entidade) {
em.persist(entidade);
em.flush();
}
問題住在這裏。 @Transactional將嘗試創建另一個EntityManager,但我已經有一個使用myPU01創建的EntityManager。我不能把persistenceUnitName放在「save」旁邊。
爲每個創建的對象調用'Persistence.createEntityManagerFactory(persistenceUnit)'似乎是一個非常糟糕的主意。 –