一尘不染

休眠-如何仅保留父项,保持子项不变

hibernate

有人可以帮我了解如何配置hibernate以执行我想要的事情。

我有一个父实体“公寓”,其中有一个“房间”列表作为子实体。我有一个用于编辑“公寓”的表格,在该表格中,我列出所有子级“房间”只是为了提供信息。房间以单独的形式添加和编辑。

因此,因为我在公寓表格中列出了房间,所以我将lazyloading设置为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;
}

阅读 239

收藏
2020-06-20

共1个答案

一尘不染

这真的很简单。无需重新填充孩子或创建单独的DTO。

如果您永远不会坚持使用子级,只需在joincolumn批注中添加insertable = false,updatable = false即可。像这样:

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