3

Hibernate 逆向工程生成的所有东西都是这样的

    @ManyToOne(fetch = FetchType.LAZY)
    @JoinColumn(name = "column_id")
    公共行程 getColumnId() {
        返回 this.columnId;
    }

我想要这种情况:当会话刷新时,首先保存所有构造的子对象,然后是父对象,根据 FK 约束。

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

你会告诉我:有一个 CASCADE 选项,但是如何将它与 JPA 一起使用?

我尝试像这样添加级联:

    @ManyToOne(fetch = FetchType.LAZY, cascade=CascadeType.PERSIST)
    @JoinColumn(name = "column_id")
    公共行程 getColumnId() {
        返回 this.columnId;
    }

对我不起作用。

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

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

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

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

4

3 回答 3

3

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

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

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

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

于 2010-04-07T13:07:54.257 回答
1

你真正需要的是

cascade=CascadeType.SAVE_UPDATE

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

cascade=CascadeType.ALL

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

于 2010-04-07T13:05:44.890 回答
0

您应该结合 JPA 和 Hibernate 的私有注释。请参阅文档

于 2013-02-21T13:16:22.607 回答