繁体   English   中英

Spring Hibernate 单向一对多关联,性能良好

[英]Spring Hibernate uni-directional One-To-Many associations with good performance

根据这两篇文章:

vlahidmihalcea.com

thorben-janssen.com

应避免单向关联。 最佳实践(让我们坚持多方的少数实体)是添加双向关联。

这在两个方面对我来说看起来很奇怪:

  1. 在数据库中,您创建第三个表来映射@onetomany。 据我所知,这是相当糟糕的(为了简单性和性能),因为如果您有效地查询,您可以只使用一个外键。 此外,如果您自己进行查询,则必须考虑第三个表,这会导致更多的工作和可能的不一致。

  2. 在 java 代码中,父元素中有一个 List,并且每个子元素都有一个对父元素的引用。 虽然它在 Java 应用程序中似乎不是一个巨大的性能问题,但它仍然需要努力避免不一致。 有一些方法可以解决这个问题,但如果您不知道,它仍然容易出现不一致。

那么我认为最好的方法是什么?

  1. 在 java 应用程序中,您只会在父类中拥有 List。
  2. 在数据库中,您没有第三个表,只有一个外键。

有没有办法实现这一点,同时仍然具有良好的性能? 我引用的文章都只是Hibernate,Spring有解决这个问题的方法吗?

为此,您不需要连接表。 你可以像这样映射它:

@Entity
public class Parent {
  @OneToMany(mappedBy = "parent")
  Set<Child> children;

  public Set<Child> getChildren() {
    return Collections.unmodifiableSet(children);
  }

  public void addChild(Child c) {
    children.add(c);
    c.setParent(this);
  }
}

@Entity
public class Child {
  @ManyToOne(fetch = FetchType.LAZY)
  @JoinColumn(name = "fk_column_name")
  private Parent parent;

  void setParent(Parent p) {
    this.parent = p;
  }
}

这将完全按照您喜欢的方式工作。 保持关联同步并不是 IMO 的大事。 您只需要保持父关联私有并通过包私有方法管理字段的设置。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM