Java 在我的例子中,提交JPA事务的最佳方式是什么?

Java 在我的例子中,提交JPA事务的最佳方式是什么?,java,hibernate,jpa,transactions,playframework,Java,Hibernate,Jpa,Transactions,Playframework,假设我有3个实体模型: History.class DetilHistory.class Logs.class 我必须这样编写代码: //Create History History h = new History(new Date(), 1, 1, 1); h.save(); //Create Detil History DetilHistory dh = new DetilHistory(1, 1, 1, h.id); dh.save(); //Create Logs Logs l =

假设我有3个实体模型:

History.class
DetilHistory.class
Logs.class
我必须这样编写代码:

//Create History
History h = new History(new Date(), 1, 1, 1);
h.save();

//Create Detil History
DetilHistory dh = new DetilHistory(1, 1, 1, h.id);
dh.save();

//Create Logs
Logs l = new Logs(1,1,1,dh.id);
l.save();
h.closeDate= new Date();
h.value = 2;
h.save();
我必须先拿到h.id才能查到dh的病史。我必须先获得dh.id才能了解l.referendodofdetilHistory

但是,有时我必须更改代码下面的变量h或dh,如下所示:

//Create History
History h = new History(new Date(), 1, 1, 1);
h.save();

//Create Detil History
DetilHistory dh = new DetilHistory(1, 1, 1, h.id);
dh.save();

//Create Logs
Logs l = new Logs(1,1,1,dh.id);
l.save();
h.closeDate= new Date();
h.value = 2;
h.save();
我这样做也是为了记录历史

不幸的是,JPA不能这样做。 我知道JPA不允许这样做的原因

我有以下问题:

  • 分离的实体被传递到持久化
  • JPA尚未初始化
我用以下方法解决了这些问题:

- JPAPluginStartTx(rollback)
- JPA.em().flush(); JPA.em().getTransaction().commit();
有人能告诉我怎么做最好吗?

你的save()方法是怎么做的?也许您可以尝试获取EntityManager实例,使用em.getTransaction()打开一个事务。开始,然后按顺序保存所有实体,然后提交事务