JPA Hibernate - 更改持久对象的主键

Mar*_*ria 3 hibernate jpa

我试图更改持久对象的ID.我正在使用JPA与Hibernate和MySQL.我执行代码时遇到的错误是:org.hibernate.HibernateException:com.tutorial.jpa.certification.listing5_18.AA实例的标识符从2更改为99

我找不到这个问题的答案,所以我很感激你的帮助.代码是:

    EntityManagerFactory emf=Persistence.createEntityManagerFactory("Tutorial");
    EntityManager em=emf.createEntityManager();     
    AA aa=em.find(AA.class, 2);

    em.getTransaction().begin();
    aa.setId(99);
    em.merge(aa);
    em.getTransaction().commit();
Run Code Online (Sandbox Code Playgroud)

Eug*_*gen 8

您永远不应该修改实体的主键 - 这定义了对象的标识,更改它是没有意义的.

如果你真的需要它 - 你最好删除实体并创建一个新的实体,只复制旧的实体,但使用新的主键.这样,如果您有任何约束 - 例如指向旧标识符的外键 - 您将了解它.

另请参阅此处"身份和排序"部分.

希望这可以帮助.

  • 在Hibernate中不可能没有 - 你必须在原始SQL中做到这一点. (2认同)
  • 您可以使用entityManager.detach(aa);分离实体 (2认同)