簡體   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