我有Spring框架保持着EntityManager
对象,我在任何DAO类我想用@PersistenceContext
注解这样注入它..如何在JPA中回滚事务?
@PersistenceContext(unitName="entityManager")
private EntityManager em;
我使用这些DAO类在数据库中像这样保存..
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
}
}
}
现在,无论是这里的DAOS使用相同的EntityManager
通过@PersistenceContext(unitName="entityManager")
注入。现在,如果在setXYZ()
之后发生异常,那么我想回滚即使保存的实体XYZ
。但是,如何从中获得EntityManager
?
如果所有道数都保持相同的对象,那么我可以只调用EntityManager
类的getTransaction().rollback()
方法吗? getTransaction()
是否会返回一个新的交易或任何当前与EntityManager
相关联的交易?
但在上述例子中,XYZ实体被保存,如果它即保存后出现异常,同时节省了myEntity所随后, XYZ实体保存是否回滚?这正是我想要的。 – user12458 2014-10-05 07:22:37
当然。这是交易的定义。它可以提交,并且在事务内部执行的所有插入,更新和删除都成功,或者它将回滚,并且在事务内部执行的所有插入,更新和删除都将被取消。 – 2014-10-05 07:25:09
现在,在我的情况下,我实际上为EntityManager使用了相同的'unitName',我可以说XYZ和MyEntity都保存在同一个事务中吗? – user12458 2014-10-05 07:26:35