当前位置: 首页 > 面试题库 >

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

秦滨海
2023-03-14
问题内容

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

问题答案:

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

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

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


 类似资料:
  • 问题内容: 有人可以帮我了解如何配置休眠以执行我想要的事情。 我有一个父实体“公寓”,其中有一个“房间”列表作为子实体。我有一个用于编辑“公寓”的表格,在该表格中,我列出所有子级“房间”只是为了提供信息。房间以单独的形式添加和编辑。 因此,因为我在公寓表格中列出了房间,所以我将lazyloading设置为false: 但是,如果我编辑一个公寓并将其存储,则所有公寓房间都会突然消失。在数据库中,它们

  • 问题内容: 我有一个关于将JPA与OneToMany关系(双向)以及CascadeType.ALL一起使用的问题。基于vlad post(https://vladmihalcea.com/a-beginners-guide-to-jpa-and-hibernate-cascade- types/ ),使用CascadeType.ALL保持OneToMany关系,也应该持续 但是,就我而言: 仅当我

  • 我的短信有点小问题。在文本的某些部分,我使用了' '来确保该特定单词不会中断(或移动)到新行。举个例子,我做了这样的事情: 所以从理论上讲,这个文本('-is')不应该以一个单词的形式出现在一个新的行中,对吧?我想那是对的。但是...这个技巧给我带来了一个问题,就是在“-”和“is”之间增加了很大的空格...而且我当然不想有那个“大空位”。我将给出结果示例: 如你所见,有一个巨大的空间。所以,我的

  • 问题内容: 我要删除,因此要从数据库中删除行。 我 确实 要删除某个实体及其所有行。不过,我 不 希望从它删除任何行。 如何 我能做到这一点? 是,并且是我要删除的实体。 请参阅下面的代码,了解我如何在“狗窝实体”中链接2: 目前,当我删除狗entitie(S),其相关的养犬实体 中 也被删除。 编辑:将狗映射到狗窝: 问题答案: 当前,当我删除狗实体时,其相关的狗窝实体也将被删除。 原因是您已设

  • 问题内容: hibernate状态是否保留LinkedHashSet的顺序?如果是,则如何?如果这取决于数据库的类型,那么我想对PostgreSQL有所了解。 背景: 我知道LinkedHashSet的用途是什么,我之所以问这个原因是因为我正在将执行的某些函数的名称记录到与某些“ functionName”表具有多对多关系的“ logError”表中。我需要这些函数保持与执行它们时相同的顺序,因此

  • 问题内容: 我们遇到了遗留代码问题。有一个用于“用户名”字段的验证集,用于验证其长度并确保其至少包含一个字母: 我们面临的问题是,一些现有的旧数据不适合这些验证,我正在尝试找到一种方法,使旧数据(旧用户)可以忽略这些验证,同时仍将这些验证应用于新创建的用户。 我正在考虑将验证移至方法(因此将仅在实际更改时验证值),但这导致了异常: 我还确保将实体设置为,但这无济于事,因为hibernate会验证所