2017-01-09 73 views
0

我目前正在處理具有多個一對多關係的表,我試圖用Hibernate來實現所有這些關係。更正多個一對多關係的hibernate實現

例如,三個表我已經是:

產品,用戶,

集團

集團與用戶的一個一對多的關係

產品也處於一個對與用戶的多種關係

由於用戶與產品和組之間存在多對一的關係,因此通過包含兩個ManyToOne批註,我當前的Users.java實現是否是正確的實現方式?

此外,在get方法上方(在這種情況下,上面的getProduct()和上面的getGroup())上面寫上ManyToOne註釋還是把它們寫在類變量的上方?

@Entity 
@Table(name = "users") 
public class Users { 
    @Id 
    @Column(name = "id") 
    @GeneratedValue 
    private int id; 

    @ManyToOne 
    @JoinColumn(name = "product_id") 
    private Product product; 

    @ManyToOne 
    @JoinColumn(name = "group_id") 
    private Group group; 

    @Column(name = "user_name") 
    private String userName; 


    public Users(){} 

    public Users(Product product, Group group, String userName) { 
     this.product = product; 
     this.group = group; 
     this.userName = userName; 
    } 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public product getProduct() { 
     return product; 
    } 

    public Group getGroup(){ 
     return group; 
    } 

    public String getUserName() { 
     return userName; 
    } 

    public void setUserName(String userName) { 
     this.userName = userName; 
    } 

} 

謝謝你的幫忙!

回答

1

由於用戶與這兩個產品和 集團多到一的關係,就我目前的執行Users.java的是爲包括兩個多對一註釋執行正確 方法是什麼?

是的,這是正確的方法(如果你只想要基本的ManyToOne映射),並且你可以在一個類中有多個ManyToOne映射。
如果您需要任何CascadingFetchType或不同的類別(targetEntity)進行定義,則需要添加這些類別。

而且,是它更好地寫多對一註解右上方的 get方法(在這種情況下,上述getProduct()及以上getGroup())或 給他們寫對上述類變量?

它主要取決於在保存對象之前是否想做一些處理。
就像發送一個默認值給數據庫,以防對象的值爲空等。

我個人比較喜歡在類變量上使用hibernate註釋。 Here是一個鏈接,它清楚地解釋了這一點。

無論採取哪種方法,hibernate都會查找@Id註釋的定義位置(在方法或變量級別),以決定爲其他字段選擇哪個掃描。

粘貼Spring documentation中提供的一些細節,這有點解決了春季的同樣的問題。

方法和字段級別注塑

註解指示依賴注射(如 @PersistenceUnit和@PersistenceContext)可以在現場或 方法施加一類的內部,因此,表述「方法/場水平 注射「。字段級註釋簡潔且易於使用,而方法級允許處理注入的依賴項。在 的情況下,會員的知名度(公開,保護,私密)不是 的事。