【发布时间】:2014-05-28 12:58:02
【问题描述】:
我对 JPA 以及实体管理器的工作方式仍然很陌生。我有一个配置了容器管理事务的应用程序,我试图弄清楚如何在一个事务中持久化多个对象。这是我首先尝试的:
@Stateless
public class UserManager{
@PersistenceContext(unitname="dataPortal")
EntityManager em;
public void insertUser(User user)
{
em.getTransaction().begin();
ChangeEvent event = new ChangeEvent("user created");
em.persist(u);
em.persist(event);
em.getTransaction().commit();
}
}
当我尝试获取交易时,这会引发非法状态异常。我通过阅读发现,当事务由容器管理时,您不应该触摸它。
我想要做的是确保 User 和 ChangeEvent 对象保留在同一个事务中。我如何通过容器管理的事务来强制执行?
【问题讨论】:
-
我注意到您想在更新或创建实体时添加事件。看看 CDI Events 或 @Stereotypes。它将帮助您避免将所有样板代码放在您的 bean 中
标签: java hibernate jpa transactions