我有一个Java REST端点,我想在该端点上访问从其他REST端点保留或更新的JPA实体,但是我在JTA EntityManager
的事务性质方面遇到困难。
例如,考虑在MyObject
上完成以下任务的端点:
mo
的实例MyObject
,并填充其某些字段并调用em.persist(mo)
; em.find(id)
来检索mo
,然后更新mo.status
。em.find(id)
检索mo
,然后根据当前填充的所有字段执行业务逻辑。这三个端点在隔离时可以正常工作,这是它们的设计方式。但是,有一种情况需要在mo
上更改一个字段,然后在新实例mo2
上连续执行所有3个端点。我最初尝试创建第四个终结点,该终结点将使用更改后的字段,然后在内部调用终结点方法(不遍历http),但是遇到了事务问题,其中endpoint2的方法遇到空mo2
,因为它可以看不到endpoint1方法已创建它并相应地更新了数据库。
em.flush()
在这里无济于事,em.getTransaction().commit()
返回
java.lang.IllegalStateException:JTA EntityManager无法使用
getTransaction()
我对这里的最佳做法不知所措,在我看来,我面前有两个选择:
在这里对您的任何帮助或见识将不胜感激!
设置: Wildfly Server 12,PostgreSQL 9.5.14,Ubuntu 18.04