Spring Hibernate具有良好性能的单向一对多关联



根据这两篇文章:

vlahidmihalcea.com

thorben-jansen.com

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

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

  1. 在DB中创建第三个表来映射@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;
}
}

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

最新更新