gpt4 book ai didi

java - JPA @GenerateValue 始终为 null

转载 作者:行者123 更新时间:2023-12-01 17:16:10 26 4
gpt4 key购买 nike

我正在使用 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());
}

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 ].

有什么想法为什么会发生这种情况吗?提前致谢!

最佳答案

EntityManager.merge() 不会修改作为参数传递的对象,也不会使其托管。它将作为参数传递给托管实体实例的对象的状态复制,并返回此托管实体实例。所以如果你想获取托管实体,你需要

poco = em.merge(poco);

关于java - JPA @GenerateValue 始终为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22018462/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com