当前位置: 首页 > 知识库问答 >
问题:

Hibernate更新/删除一对多集合

郎项禹
2023-03-14

我有两个类parentchild,它们具有一对多关系。

假设我已经在我的数据库结构中持久化了,如下所示:

Parent--> Child1, Child2
Parent--> Child1, ​Child3

---编辑---

实体不是什么花哨的东西,比如:

@Entity
@Data
public class Parent {
   @Id
   @GeneratedValue(strategy = SEQUENCE)
   private long id;

   @OneToMany(mappedBy = "parent", casade = CasadeType.ALL, orphanRemoval = true)
   private Set<Child> childList;
}


@Entity
@Data
public class Child {
   @Id
   @GeneratedValue(strategy = SEQUENCE)
   private long id;

   @ManyToOne
   @JoinColumn(name = "xxx")
   private Parent parent;

}

共有1个答案

锺离高丽
2023-03-14

这是我遵循的模式:

    @Entity
    @Data
    public class Parent {
       @Id
       @GeneratedValue(strategy = SEQUENCE)
       private long id;

       @OneToMany(mappedBy = "parent", casade = CasadeType.ALL, orphanRemoval = true)
       private Set<Child> childList = new HashSet<>();
       
       public void addChild(Child child){

            if(child!=null){
              this.childList.add(child);
              child.setParent(this);   
            }
       }

       public void removeChild(Child child){

            if(child!=null){
              this.childList.remove(child);
              child.setParent(null);   
            }
       }

       public void updateChildren(Collection<Child> children){
           childList.forEach(x-> if(!children.contains(x)) this.removeChild(x); );
             
           children.forEach(x-> this.addChild(x));
       }
 类似资料:
  • 问题内容: 我发现从Hibernate的集合中删除orphan记录并没有被删除。我一定在做一些简单的错误(这是Hibernate-101!),但是我找不到它。 给定以下内容: 以及以下更新代码: DAO片段: 以下测试失败: 总而言之,我发现: 从作者的藏书中删除该书后,该书仍存在于数据库中 如果我检查,那本书不存在该书 这种“感觉”就像我没有刷新会话或适当地强制进行更新-但我不确定应该在哪里进行

  • 当我试图删除宠物时,我得到了这个错误。这个宠物,有访问(子),但我在宠物实体中定义了CASCADE. ALL。任何想法?错误:无法删除或更新父行:外键约束失败(。 访问类:

  • 问题内容: 我在我的数据库3个表:,和 学生可以有多个课程,课程可以有多个学生。和之间存在多对多关系。 我为我的项目和课程添加了3个案例。 (a)当我添加用户时,它会保存得很好, (b)当我为学生添加课程时,它会在-预期行为中创建新的行。 (三)当我试图删除学生,则在删除适当的记录和,但它也删除其中不需要的记录。即使课程中没有任何用户,我也希望课程在那里。 下面是我的表和注释类的代码。 这是Hib

  • 问题内容: 我在Hibernate中有标准协会。更新时,我正在创建新实体(使用关键字),并用必要的值(还插入ID)填充它。值来自UI。以相同的方式,我创建了子对象的新集合,用值(也插入了ID)填充每个子对象,并将集合存储在父对象中(使用setter或按方法)。 所以我的问题是:如何在更新父级时删除父级集合中的所有对象,并用新的集合替换它们。在新集合中,某些对象确实是新对象,而某些对象仅需要更新(它

  • 问题内容: 我正在尝试使我的@OneToMany和@ManyToOne关系正确。 第1类: 第2类: 当我加载或保存新记录时,这种关系似乎运行良好: 但是,当我尝试更新该记录时,它将尝试将IdeaProfileId设置为null: 当我调试时,我可以看到IdeaProfileId确实在音高对象上设置了… 仅供参考,我不是直接更新从数据库加载的原始对象。这些域映射到UI更新的Model类。因此,在保

  • 使用Spring Boot 1.4.0和MySql 5.7 我有两个table并且它是单向的@manytomany,但是在角色的父端,我想删除权限hibernate会自动删除它自己和link-table记录: > 权限