![](/img/trans.png)
[英]How to get only parent without children in Hibernate and without lazy exception?
[英]Hibernate - How to persist only the parent, keeping the children as they are
有人可以帮我了解如何配置 hibernate 来做我想做的事。
我有一个父实体“Appartment”,其中有一个“房间”列表作为子实体。 我有一个表格来编辑“公寓”,在该表格中,我列出了所有儿童“房间”,仅供参考。 房间以单独的形式添加和编辑。
因此,因为我在公寓表单中列出了房间,所以我将延迟加载设置为 false:
@OneToMany
@JoinColumn (name = "appartmentId")
@LazyCollection (LazyCollectionOption.FALSE)
private List<Room> room;
但是如果我编辑一个公寓并存储它,所有的公寓房间都会突然消失。 在数据库中,它们不会被删除,而是被取消引用(如 appartmentId = null)。
那么如何配置 hibernate 以仅保留我的 Appartment 对象。 而且根本不碰孩子?
这是我的保存动作:
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。
如果您永远不会保留孩子,只需将 insertable=false, updatable=false 添加到您的 joincolumn 注释中。 像这样:
@OneToMany
@JoinColumn (name = "appartmentId", insertable = false, updatable = false)
@Fetch(value = FetchMode.JOIN)
private List<Room> room;
考虑使用 DTO,而不是使用持久实体(在 web 页面的情况下,您可以将它们称为页面 model)。 它们可以让您灵活地描述您想要的信息并以您想要的格式显示它。 但是你应该为此付出代价——你正在向你的系统添加新的类,你必须想出一种将实体转换为 DTO 并向后转换的方法。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.