2015-12-17 206 views
0

我有兩個班,家長和兒童雙向映射

@Entity 
class Parent { 

    @Id 
    private long id; 

    @OneToMany 
    private List<Children> children; 

} 

@Entity 
class Children { 

     @Id 
     private int id; 

     @ManyToOne 
     private Parent parent; //Normal bi-directional mapping 
        // OR 
     private long parentId; //just keeping reference to parent (kind of bi-directional) 
} 

要求

我確實需要在兩個方向導航式訪問。但是從孩子到父母的導航訪問並不重要。它會偶爾使用一次來做一些操作。從父母到孩子的導航訪問在應用層和核心業務邏輯的一部分中非常重要。

  1. 在這裏保持雙向映射是否有意義?
  2. 如果是,那麼在父母身上保留父母的身份是否合理?如果我將整個父實體映射到孩子,我恐怕會遇到複雜情況。

據我所知,映射的實體或只是父母的Id不會在數據庫存儲方面有所作爲,因爲在這兩種情況下數據庫將只保留一列(作爲外鍵的情況下的映射實體,並且在保持id的情況下作爲正常的column-parentId)。

但是,如果我明確告知數據庫有關兩個實體之間的雙向關係,我可能會獲得一些性能?

PS:忽略缺少的註釋和其他參數,從而在語法上完成映射。這個問題不是關於'我該怎麼',而是'我應該'?

回答

0

你平時做Hibernate是:

Child.class

@ManyToOne(fetch = FetchType.EAGER) 
@JoinColumn(name = "parent_id") 
private Parent parent; 

也就是說,你只能加入的ID,但存儲整個父對象,分別

Parent.class

@OneToMany(fetch = FetchType.LAZY, mappedBy = "parent") 
private List<Children> children = new ArrayList<Children>(); 

回答你的第一個問題:是的,雙向映射使得感覺,因爲有明顯的聯繫。

編輯:雖然映射並不完美,因爲孩子通常沒有一個父母,而是兩個。 ;)