我正在使用MySQL/JPA,即使在提交后,持久化实体上的自动生成的ID也不可用.这是它发生的代码:
synchronized (em.getTransaction()) {
while (em.getTransaction().isActive()) {
em.getTransaction().wait();
}
em.getTransaction().begin();
try {
em.merge(transmissor);
em.merge(poco);
em.flush();
//em.refresh(poco);
System.out.println("ID: " + poco.getIdEstacao());
} catch (Exception ex) {
System.out.println(ex.toString());
ex.printStackTrace();
}
// Some other unrelated code...
em.getTransaction.commit();
em.getTransaction.notify();
System.out.println("ID: " + poco.getIdEstacao());
}
Run Code Online (Sandbox Code Playgroud)
之后em.flush()和之后em.getTransaction.commit(),都会poco.getIdEstacao回来null.如果我尝试em.refresh(poco)它会引发异常:
java.lang.IllegalArgumentException: Can not refresh not managed object:unesp.lebac.aquitel.dataLink.enitity.Poco[ idEstacao=null ].
Run Code Online (Sandbox Code Playgroud)
任何想法为什么会这样?提前致谢!
EntityManager.merge()不会修改作为参数传递的对象,也不会对其进行管理.它将作为参数传递的对象的状态复制到托管实体实例,并返回此托管实体实例.因此,如果您想获得托管实体,则需要
poco = em.merge(poco);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
424 次 |
| 最近记录: |