Hibernate级联操作

3
所有Hibernate反向工程生成的内容都像这样:
    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "column_id")
    public Itinerary getColumnId() {
        return this.columnId;
    }
我希望实现这种情况:当会话刷新时,首先保存所有构建的子对象,然后根据FK约束保存父对象。
当然,需要首先自动保存子对象,因为有FK约束。
你可能会告诉我:有一个级联选项,但如何在JPA中使用呢?
我尝试添加类似于以下代码的级联选项:
    @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.PERSIST)
    @JoinColumn(name = "column_id")
    public Itinerary getColumnId() {
        return this.columnId;
    }
但对我来说不起作用。
首先告诉我:应该用这个指令注释哪些内容以及如何使其工作。
我得到了“无法添加或更新子行:外键约束失败”的异常。
实际上,我不想手动持久化所有东西!只需构造一个对象并将其持久化即可!
要注释什么,使用什么指令以及如何操作?
3个回答

3
尝试将级联注释放置在映射的父端,例如:
@OneToMany(cascade = { CascadeType.PERSIST, 
                       CascadeType.MERGE, 
                       CascadeType.REMOVE },
           mappedBy = "children")
private Set<Children> children = new HashSet<Children>();

你可能需要或不需要所有这些级联选项-选择你的选择。

在这里是一个参考页面,以防万一。


1

你真正需要的是

cascade=CascadeType.SAVE_UPDATE

但这不是JPA的一部分。所以你可以使用这个替代:

cascade=CascadeType.ALL

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


0
你应该结合JPA和Hibernate的私有注解。请参见文档

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接