【发布时间】:2016-07-18 09:35:14
【问题描述】:
我正在使用 JPA,我有一个抽象类,我在其中注入我的 entityManager,我有一个通用方法,我将我的对象持久保存到数据库中,并且在我的所有服务类中扩展了该抽象类,但问题是:有时我有持久化客户端和客户端详细信息,但是如果我在客户端持久化中有异常,那么我的程序会持久化客户端详细信息,这就是为什么我在遇到持久异常时寻找回滚来调用的原因。
我知道我可以像 entityManager.getTransaction().rollback(); 那样做,但如果我管理我的实体管理器,但在我的情况下,它由容器管理。
这是我的抽象类:
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;
}
}
注意:我有 Jboss EAP6 作为服务器
【问题讨论】:
-
注入EntityManager的是Spring吗?但是,只需抛出
RuntimeException就应该回滚事务。没有发生吗? -
任何容器在发生异常时都会回滚事务,而大多数持久化提供者都要求JPA在发生持久性异常时将事务标记为回滚。您能否详细说明您要解决的问题?
标签: java hibernate jpa jpa-2.0 hibernate-mapping