@TransactionalをDeltaSpikeライブラリで使用しようとしていますが、いくつか問題があります。見てみましょう:既に@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)'を呼び出すことは非常に悪い考えです。 –