2014-01-12 85 views
0

我有一個數據模型,其中有:問題的映射對Hibernate JPA

  • 它有特定的用戶在應用程序
  • 另一個實體UserDetails,其中包含具體細節的幾個字段User實體User實體中的字段中的一個特定類型的用戶

兩個實體共享相同的主鍵。我是JPA的新手。兩者之間應該有什麼樣的映射?

@Entity 
class User{ 
    @Id 
    @Column(name="USER_ID") 
    private int id; 
} 


@Entity 
class UserDetails{ 
    @Id 
    @OneToOne(optional = false, fetch = FetchType.EAGER) 
    @JoinColumn(name = "USER_ID") 
    private User user; 

    ... 
} 

上述映射給出了獲取UserDetails特定User的問題。

它要求兩個實體共享相同的主鍵USER_ID。

回答

1

您沒有提到上述映射的問題。它看起來不錯,但我會爲表UserDetails使用一個單獨的主鍵。

@Entity 
class UserDetails{ 
    @Id 
    private int id; 

    @OneToOne(optional = false, fetch = FetchType.EAGER) 
    @JoinColumn(name = "USER_ID") 
    private User user; 

    ... 
} 

而且,使用bidirectional relationships,爲eaiser導航即從User獲取用戶信息的好做法,你只用user.getUserDetails();所以在User類:

@Entity 
class User{ 
    @Id 
    @Column(name="USER_ID") 
    private int id; 

    @OneToOne(mappedBy = "user") 
    private UserDetails userDetails; 
} 
+0

實際上,數據模型要求共享作爲USER_ID的主鍵是兩個實體的主鍵。在上述情況下獲取用戶列表時,我得到一個空輸出,而DB中的表中有用戶中的行。 – user2906234

0

在這種情況下使用OneToOne關係。但請確保您的數據庫表UserDetailsUser表具有外鍵關係。使用下面的代碼使用JPAHibernate來實現它。

@Entity 
class User{ 
    @Id 
    @Column(name="USER_ID") 
    private int id; 

    // getters and setters 
} 


@Entity 
class UserDetails{ 
    @Id 
    @Column(name="USER_DETAILS_ID") 
    private int userDetailsId; 

    @OneToOne(optional = false, fetch = FetchType.LAZY) 
    @JoinColumn(name = "USER_ID") 
    private User user; 

    // getters and setters 
} 
+0

實際上,數據模型要求共享作爲USER_ID的主鍵是兩個實體的主鍵。在獲取我提到的用戶列表時,我得到一個空輸出,而DB中的表在用戶中有行。 – user2906234