gpt4 book ai didi

java - 如何在使用新生成的实体标识符时深度复制 Hibernate 实体

转载 作者:IT老高 更新时间:2023-10-28 21:18:03 32 4
gpt4 key购买 nike

我正在使用一个关系数据库,它使用带有几个嵌套表的单列 pk。

我需要向我的项目添加一个简单的归档。归档仅在应用程序达到特定状态时发生,因此我希望将现有的 hibernate 对象复制到一个新实例中,新实例将使用新 ID 保存,同时保持现有对象不变。

我似乎无法弄清楚如何将现有对象复制到新实例中,而无需手动设置每个新实例字段。

有人知道这样做的简单方法吗?

最佳答案

只需检索对象,分离它,将 id 设置为 null 并将其持久化。

MyEntity clone = entityManager.find(MyEntity.class, ID);
entityManager.detach(clone);
clone.setId(null);
entityManager.persist(clone);

如果您的对象具有 oneToMany 关系,则您必须对所有子对象重复该操作,但设置父对象 id(在 persist 调用后生成)而不是 null。

当然,您必须删除 OneToMany 关系上的任何 CASCADE persist,否则您的持久性将在 DB 或 fk 约束失败中创建所有子项的重复。

关于java - 如何在使用新生成的实体标识符时深度复制 Hibernate 实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9944882/

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