1 单向 1-N ,1得一端设置inverse="false",cascade="all",
为什么插入一条1得数据,不能直接将主键设置到多的一端,
非得等多得一端插入数据库后,再将1得主键更新到多得一端.
hibernte 单向1-N 插入疑惑
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
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),你可能需要考虑使用
OneToMany和ManyToOne联合映射,并且确保它们之间的方向正确。解决 无用评论 打赏 举报