簡體   English   中英

層次結構中 JPA 個實體之間的雙向關系

[英]Bidirectional relationship between JPA entities in a hierarchy

我正在為我的項目使用 Spring 數據 JPA(提供者為 hibernate),想知道何時需要實體之間的雙向映射?

在我的用例中,我有一個CategoryGroup實體與Department實體具有@ManyToOne關系。 目前,我在Department實體中沒有對應的@OneToMany關系。 從我可以理解的看其他帖子,除非我需要通過我的實體/休眠刪除,我可能不需要這樣做。 我想知道建立雙向關系還能得到什么?

這是我的Department ,不包括訪問者:

@Entity
  @Table(name="dbo.Department")
  public class Department 
  {
        @Id
        @Column(name="id")
        private long id;
            
        @Column(name="name")
        private String name;
  }

這是不包括訪問器的CategoryGroup

@Entity
@Table(name="dbo.CategoryGroup")
public class CategoryGroup
{
    @Id
    @Column(name="id")
    private long id;
    
    @ManyToOne(fetch=FetchType.LAZY)
    @JoinColumn(name="dept_id")
    private Department department;
    
    @Column(name="name")
    private String name;
    
    public CategoryGroup()
    {       
    }
    
    public CategoryGroup(String name, Department department)
    {
        this.name = name;
        this.department = department;
    }
}

作為后續,我的結構本質上是分層的。 Category實體與Category實體具有@ManyToOne關系,並且SubCategory實體與CategoryGroup實體具有@ManyToOne關系。

如果我繼續在關系的父端添加雙向關系映射,那么這是否意味着一旦我檢索到Department我將最終獲得整個實體層次結構直到SubCategory 對於我的用例,這是不可取的。 標記與FetchType.LAZY的關系會緩解這種情況嗎?

謝謝

OneToMany 和 ManyToMany 關聯默認是惰性的,因此在添加這些關聯時不會獲取整個層次結構。

通常,添加這些關聯可以極大地幫助您進行查詢,因為它減少了根據連接條件進行顯式實體連接的需要。 除此之外,如果需要,您可以定義級聯刪除,即,如果刪除了一個部門,您可能希望刪除與其關聯的所有類別組。

除此之外,從建模的角度明確地分離域可能是可取的。 您可能希望一個部門被隔離,即對連接到它的對象一無所知。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM