我有一个由Spring框架维护的EntityManager
对象,我使用@PersistenceContext
注释将它注入到我想要的任何DAO类中,如下所示。
@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
}
}
}
现在,这里的两个DAO都使用了通过@PersistenceContext(unitname=“EntityManager”)
注入的相同的EntityManager
。现在,如果在setxyz()
之后发生异常,那么我甚至希望回滚保存的xyz
实体。但是,如何从中获取EntityManager
?
如果所有DAO都持有相同的对象,那么我可以直接调用EntityManager
类的getTransaction().rollback()
方法吗?GetTransaction()
返回新事务或当前与EntityManager
关联的任何事务吗?
>
如果您使用Spring AOP来管理事务,并且配置和注释被正确使用,那么默认的效果是当运行时异常发生时事务将被回滚。
如果手动管理事务,则可以如下所示回滚事务:
EntityManager em = createEntityManager();
try {
em.getTransaction().begin();
// Do something with the EntityManager such as persist(), merge() or remove()
em.getTransaction().commit();
} catch(Exception e) {
em.getTransaction().rollback();
}
em.close();
更多信息请访问:http://en.wikibooks.org/wiki/java_persistence/transactionshttp://www.developerscrappad.com/547/java/java-ee/ejb3-x-jpa-when-to-use-rollback-and-setrollbackonly/#sthash.jx3xlk5m.dpuf
问题内容: 调用的方法: 1. Struts Action 2.服务类方法(由@Transactional注释) 3. Xfire Web服务调用 包括struts(DelegatingActionProxy)和事务在内的所有内容都使用Spring进行配置。 持久性是通过JPA / Hibernate完成的。 有时,Web服务将引发未经检查的异常。我捕获了此异常并抛出了一个已检查的异常。我不希望事
我为教育阿帕奇骆驼交易编写了此代码 我在发生错误后使用事务处理,我必须触发事务回滚,但由于某种原因,消息保留在SAMPLE_2和SAMPLE_3队列中。为什么? 更新: 我添加了豆子 并修复路线,但这对我没有帮助: 我在文档中找到了这个配置 如何从这个xml创建bean?
我在使用@Transactional注释进行事务回滚时遇到了一个问题。 我在backingbean、service和dao类中有以下方法:
在我的项目中,我将Hibernate与Spring和JPA结合使用。代码在服务层使用注释驱动的事务(使用@Transactional注释支持事务)。事务管理器是org.springframework.orm.hibernate4.HibernateTransactionManager。当任何@Transactional注释方法中发生异常时,当前事务将自动回滚。 我想知道如果我想在事务回滚时记录异常
问题内容: 我在下面使用HIbernate和Spring和JPA。当引发PersistenceException时,我想捕获它并返回错误消息,以便它不会传播到调用者。 但是我得到一个异常,说我需要在异常之后回滚事务,但是当我捕获到异常并且不想重新抛出该异常时,如何回滚它呢? 问题答案: 似乎没有办法回退由Spring ORM管理的失败事务。问题中显示的代码是服务类。将其持久性例程提取到单独的DAO