Witam,
od dwóch dni męczę się z transakcjami w jta. Chciałem prosić o pomoc bardziej doświadczone osoby. Gdy próbuje zapisać do bazy model, który nie ma żandych relacji z innymi modelami to nie ma żadnego problemu. I robie to w taki sposob (część metody serwisowej):
dao.transactionOpen();
Model model = dao.save(model);
dao.transactionCommit();
metoda transactionOpen wywoluje:
utx.begin(); //utx - UserTransactionManager
a transactionCommit:
try {
utx.commit();
} catch (Exception e) {
utx.rollback();
throw e;
}
i jeszcze metoda save z dao:
return em.merge(entity); // em - EntityManager
Problem pojawia się w momencie gdy próbuje zapisać model z relacją OneToMany:
dao.transactionOpen();
ModelB modelB = new ModelB();
modelB.getModelsA().add(modelA);
dao.save(modelB);
dao.transactionCommit();
Po stronie modelA mam adnotację:
@ManyToOne
@JoinColumn(name="model_b")
a po stronie modelB:
@OneToMany(mappedBy="modelsA", cascade = CascadeType.PERSIST)
Przy próbie zapisu czegoś takiego do bazy dostaję:
java.lang.IllegalStateException: No transaction associated with current thread
at org.apache.geronimo.transaction.manager.TransactionManagerImpl.rollback(TransactionManagerImpl.java:262)
at core.dao.impl.GenericDaoImpl.transactionCommit(GenericDaoImpl.java:66)
Komunikat jest jasny i zrozumiały ale nie wiem dlaczego tak się dzieje. Czy utx.begin() nie tworzy nowej transakcji? W czym jest problem? A może brakuję jakiejś adnotacji?