一尘不染

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

hibernate

我正在尝试更改持久对象的ID。我在Hibernate和MySQL中使用JPA。我执行代码时遇到的错误是: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();

阅读 662

收藏
2020-06-20

共1个答案

一尘不染

您永远不要修改实体的主键 -这定义了对象的标识,并且更改对象没有任何意义。

如果确实需要-最好删除该实体,然后创建一个新实体,该实体只是复制旧实体,但使用新的主键。这样,如果您有任何约束(例如指向旧标识符的外键),您就会知道的。

也可以在此处查看“身份和排序”部分

希望这可以帮助。

2020-06-20