昆仑山的昆 2015-04-24 14:17 采纳率: 0%
浏览 639

hibernte 单向1-N 插入疑惑

1 单向 1-N ,1得一端设置inverse="false",cascade="all",
为什么插入一条1得数据,不能直接将主键设置到多的一端,
非得等多得一端插入数据库后,再将1得主键更新到多得一端.

  • 写回答

1条回答 默认 最新

  • 你知我知皆知 2024-08-03 17:57
    关注

    以下回答参考 皆我百晓生券券喵儿 等免费微信小程序相关内容作答,并由本人整理回复。

    在Hibernate中,如果你有一个一对一的关系(One-to-One)和一个多对多的关系(OneToMany),你可以使用cascade属性来决定如何处理这些关系。如果选择CascadeType.ALL,那么当你试图从一个实体对象(例如,User实体)删除其关联的另一个实体对象时,Hibernate会自动执行以下操作:

    • 删除关联的外键(即多对多关系中的外键)
    • 更新或删除关联的主键(即一对一关系中的主键)

    但是,在你的例子中,你提到的是单向一对多的关系(Single-to-Many)。在这种情况下,cascade属性应该为CascadeType.PERSIST,以确保只更新关联的主键,而不是同时删除关联的外键。

    @OneToMany(mappedBy = "parent", cascade = CascadeType.PERSIST)
    private List<User> children;
    

    这样,当你尝试从User实体对象删除其关联的Child实体对象时,只有其关联的主键会被更新,而外键不会被删除。这符合单向一对多的关系模式。

    然而,如果你想要实现双向一对多的关系(Two-way One-to-Many),你可能需要考虑使用OneToManyManyToOne联合映射,并且确保它们之间的方向正确。

    评论

报告相同问题?