代码之家  ›  专栏  ›  技术社区  ›  JoonT

为什么Hibernate要检测子实体?

  •  0
  • JoonT  · 技术社区  · 6 年前

    我有父实体和子实体,
    我给了级联类型.PERSIT子实体。

    当我坚持让父母带孩子时,效果很好。
    但当我添加child时,hibernate开始插入行。

    @Entity
    class Parent{
        @Id
        private Long id;
    
        @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
        private List<Child> children = new ArrayList<>();
    }
    
    @Entity
    class Child{
        @Id
        private Long id;
    
        @ManyToOne..
    }
    
    
    public void testCascade(){
        Parent parent = new Parent();
    
        Child child1 = new Child();
        Child child2 = new Child();
    
        parent.addChild(child1);
        parent.addChild(child2);
    
        em.persist(parent);
    
        // works well until here
    
        Child child3 = new Child();
        parent.addChild(child3);
    }
    

    child3 parent 没有 em.persist ,是的 insert
    他们为什么这么做?
    我就知道 CascadeType.PERSIST

    em.persist(parent); 
    ==
    em.persist(parent);
    em.persist(child1);
    em.persist(child2);
    

    CascadeType.MERGE

    em.merge(parent); 
    ==
    em.merge(parent);
    em.merge(child1);
    em.merge(child2);
    

    我没想到会有变化。
    如果我给你 它工作得和我预期的一样好。

    你能解释一下这种情况吗?

    0 回复  |  直到 6 年前