Ich benutze JPA und ich habe eine abstrakte Klasse, wo ich injiziere mein entityManager und ich habe eine generische Methode, wo ich mein Projekt in der Datenbank persistent und in allen meine Dienste Klasse erweitert diese abstrakte Klasse aber das Problem ist: manchmal muss ich persist client und client details, aber wenn ich eine ausnahme in der persist des clients habe, dann behalte mein programm client-details aus, weswegen ich nach einem rollBack suche, das aufgerufen wird, wenn ich eine persist-ausnahme habe.Wie RollBack eine Transaktion eines EntityManager von @PersistenceContext injiziert?
Ich khow, dass ich wie entityManager.getTransaction().rollback();
tun kann, aber wenn ich meine Entity Manager, aber in meinem Fall verwaltet, verwaltet es durch den Container.
Hier ist meine abstrakte Klasse ist:
public abstract class AbstractEntityFactory<E>{
protected static final transient Logger LOGGER = CommonLogger.getLogger(AbstractEntityFactory.class);
@PersistenceContext(unitName = "Test_PU")
@Transient
@XmlTransient
private transient EntityManager entityManager;
public E persist(final E arg0) {
LOGGER.debug("persist : Begin");
this.getEntityManager().persist(arg0);
this.getEntityManager().flush();
LOGGER.debug("persist : End");
return arg0;
}
}
NB: Ich habe Jboss EAP6 als Server
Ist es Frühling, die die EntityManager einspritzt? Wenn Sie dann jedoch die RuntimeException auslösen, sollte die Transaktion zurückgesetzt werden. Geschieht es nicht? –
Alle Container führen einen Rollback der Transaktion aus, wenn eine Ausnahme vorliegt. Die meisten Persistenzanbieter werden von JPA benötigt, um die Transaktion für Rollbacks zu kennzeichnen, wenn eine Persistenzausnahme auftritt. Können Sie näher erläutern, welches Problem Sie lösen möchten? – Chris