加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Hibernate – 如何只保留父节点,保持子节点不变

发布时间:2020-12-15 00:55:15 所属栏目:Java 来源:网络整理
导读:有人可以帮我理解如何配置hibernate来做我想要的. 我有一个父母实体“公寓”,其中有一个“房间”列表作为孩子. 我有一个表格来编辑“公寓”,在这个表格中,我列出了所有孩子的“房间”仅供参考.客房以单独的形式添加和编辑. 所以因为我在公寓表单中列出了房间
有人可以帮我理解如何配置hibernate来做我想要的.

我有一个父母实体“公寓”,其中有一个“房间”列表作为孩子.
我有一个表格来编辑“公寓”,在这个表格中,我列出了所有孩子的“房间”仅供参考.客房以单独的形式添加和编辑.

所以因为我在公寓表单中列出了房间,所以我将lazyloading设置为false:

@OneToMany
@JoinColumn (name = "appartmentId")
@LazyCollection (LazyCollectionOption.FALSE)
private List<Room> room;

但如果我编辑一个公寓并存储它,所有的公寓房间突然消失了.在数据库中,它们不会被删除,而是被解除引用(如appartmentId = null).

那么如何将hibernate配置为仅保留我的Appartment-object.而不是触摸孩子们?

这是我的保存动作:

public String save() throws Exception {
    boolean isNew = (appartment.getAppartmentId() == null);

    appartment = appartmentManager.save(appartment);

    String key = (isNew) ? "appartment.added" : "appartment.updated";
    saveMessage(getText(key));

    return SUCCESS;
}

解决方法

这很简单.无需重新填充您的孩子,或创建单独的DTO.

如果你永远不会坚持孩子,只需在你的joincolumn注释中添加insertable = false,updatable = false.像这样:

@OneToMany
@JoinColumn (name = "appartmentId",insertable = false,updatable = false)
@Fetch(value = FetchMode.JOIN)
private List<Room> room;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读