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

时间:2014-01-09 11:19:14

标签: 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();

1 个答案:

答案 0 :(得分:5)

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

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

另请查看"Identity and Sequencing" section here

希望这会有所帮助。