gpt4 book ai didi

java - 如何防止不必要的插入选择?

转载 作者:搜寻专家 更新时间:2023-10-31 20:30:36 24 4
gpt4 key购买 nike

我有以下场景(在 Java/Hibernate 中):

  • 我有两个实体类:X 和 Y。X 与 Y 有一个不级联的 @ManyToOne 关联。
  • 我创建了 X 的(非托管)实例 x 和 Y 的(非托管)实例 y,并在 x 中填充对 y 的引用。 y 的唯一字段是主键。
  • 实体 y 在底层数据库中已有相应的行,但实体 x 是新的。
  • 我坚持实体 x。

当我执行这一场景时,我希望看到一个查询:INSERT x。然而,实际发生的是 Hibernate 执行两个查询:

  • 选择是
  • 插入 x

此外,我还注意到,在 x 的持久化之后,对 y 的引用实际上并没有变成托管的,并且 session 中没有 Y 的实例!那么,为什么要执行 y 上的 SELECT 呢?有什么方法可以防止这种行为?

最佳答案

您不需要(实际上您不应该)手动实例化 Y。你可以做这个的变体(取决于你的配置)

Y y = (Y) session.load(Y.class, pk);

这不会从数据库中检索 Y,而是加载仅由您提到的 pk 组成的代理。

然后将 y 分配给 x,并持久化 x 会如您预期的那样表现。

关于java - 如何防止不必要的插入选择?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6476982/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com