我的目标是在我的数据库中插入一条记录,然后在新事务中更新它。
我这样尝试:
@PersistenceContext(unitName="Table")
private EntityManager manager;
@EJB
private ITransactionTest itt;
public void insertRecord(int i) throws RuntimeException{
Record record = new Record();
record.setId(i+"");
record.status(1);
manager.persist(record);
manager.flush();
itt.updateRecord(i);
}
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
public void updateRecord(int i) throws RuntimeException{
Record record = manager.find(Record.class, i+"");
record.setStatus(2);
manager.flush();
}
但是,它不起作用。我也尝试用它getReference()
来检索我的记录,然后它抛出一个异常,说找不到实体。该实体似乎不再驻留在持久性上下文中。
如果我删除 的注释REQUIRES_NEW
,它可以工作并且我可以成功更新我的记录。
那么如何在新交易中更新我的记录呢?如何在跨事务的持久性上下文中保持实体处于托管状态?
似乎使用 JPA 执行更新 sql 查询可以实现我的目标。但是还有其他方法吗?
最好的祝福,
卡杰拉斯