有人可以帮我理解如何配置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;