JPA @GeneratedValue总是为null

Bru*_*res 0 java jpa

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

任何想法为什么会这样?提前致谢!

JB *_*zet 5

EntityManager.merge()不会修改作为参数传递的对象,也不会对其进行管理.它将作为参数传递的对象的状态复制到托管实体实例,并返回此托管实体实例.因此,如果您想获得托管实体,则需要

poco = em.merge(poco);
Run Code Online (Sandbox Code Playgroud)