我还是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对象在同一个事务中保持不变。如何使用容器管理的事务强制执行该操作?
答案 0 :(得分:0)
就像您已经说过的那样,交易由容器管理。
如果您希望User
和ChangeEvent
同时保留在同一个事务中,只需按以下方式注释您的方法:
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
@TransactionManagement(TransactionManagementType.CONTAINER)
public void insertUser(User user)
{
ChangeEvent event = new ChangeEvent("user created");
em.persist(u);
em.persist(event);
}
这应该可以解决问题。如果您还有其他问题,请随时提出。