I have an EntityManager
object maintained by the Spring framework and I inject it in whatever DAO class I want using the @PersistenceContext
annotation like this..
@PersistenceContext(unitName="entityManager")
private EntityManager em;
I use those DAO classes to save in the database something like this..
class MyClass
{
@Resource(name="myDao")
private MyDao dao;
@Resource(name="myAnotherDao")
private MyAnotherDao anotherDao;
public void save(String s1,String s2)
{
try
{
MyEntity m=new MyEntity();
m.setName(s1);
// .. and so on ..
XYZ x=new XYZ();
x.setDEF(s2);
anotherDao.save(x);
m.setXYZ(x);
// .. some other stuff .. //
dao.saveEntity(m);
}
catch(Exception e)
{
// I would like to rollback the transaction
}
}
}
Now, both the daos here use the same EntityManager
injected through @PersistenceContext(unitName="entityManager")
. Now, if an exception occurs after setXYZ()
, then I would like to rollback even the saved XYZ
entity. But, how do I get the EntityManager
from that?
If all the daos hold the same object, then can I just call the getTransaction().rollback()
method of the EntityManager
class? Does the getTransaction()
return a new transaction or any transaction that is currently associated with EntityManager
?