首页 文章

Hibernate级联

提问于
浏览
2

Hibernate逆向工程生成的所有内容都是这样的

@ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "column_id")
    public Itinerary getColumnId() {
        return this.columnId;
    }

我想要这个场景:当会话刷新时,首先保存所有构造的子节点,然后根据FK约束保存父对象 .

当然,孩子需要先保存(自动!),因为有FK约束 .

你告诉我:有一个CASCADE选项,但如何在JPA中使用它?

我尝试添加这样的级联:

@ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.PERSIST)
    @JoinColumn(name = "column_id")
    public Itinerary getColumnId() {
        return this.columnId;
    }

对我不起作用 .

先告诉我:应该用这个指令注释什么以及如何使它工作 .

我得到“无法添加或更新子行:外键约束失败”异常 .

事实上,我不想手工坚持一切!只构造一个对象并坚持下去!

注释什么,使用什么指令以及如何使用?

3 回答

  • 0

    尝试将级联注释放到映射的父端,例如

    @OneToMany(cascade = { CascadeType.PERSIST, 
                           CascadeType.MERGE, 
                           CascadeType.REMOVE },
               mappedBy = "children")
    private Set<Children> children = new HashSet<Children>();
    

    您可能需要也可能不需要所有这些级联选项 - 选择您的选择 .

    这是一个reference page以防万一 .

  • 2

    你真正需要的是

    cascade=CascadeType.SAVE_UPDATE
    

    但这不是JPA的一部分 . 所以你可以用它代替:

    cascade=CascadeType.ALL
    

    它将包括SAVE_UPDATE(使用Hibernate实现) . 但它可能包括你不喜欢的其他级联 .

  • 1

    您应该结合JPA和Hibernate的私有注释 . 见documentation .

相关问题