2015-12-24 171 views
2

我試圖創建一個用戶表具有使用用戶名作爲外鍵的OneToMany關係,但ManyToOne關係中的用戶名字段每次都通過Null。春季休息休眠OneToMany/ManyToOne

關係:

User: 

    @OneToMany(targetEntity = Authority.class, cascade=CascadeType.ALL, mappedBy="username") 
    private Collection<Authority> authorities 

Authority: 

    @Column(nullable = false, name="username") 
    @JoinColumn(name="user_username") 
    String username; 

生成的表:

+----+--------------------+-----------+---------+ 
| id | username   | password | enabled | 
+----+--------------------+-----------+---------+ 
| 13 | will    | q   |  0 | 
| 34 | I just got editted | adufhasdf |  1 | 
| 36 | wakakawakwakaak | ballz  |  0 | 
+----+--------------------+-----------+---------+ 

+----+----------+------------+ 
| id | username | authority | 
+----+----------+------------+ 
| 6 | NULL  | ROLE_ADMIN | 
| 7 | NULL  | ROLE_ADMIN | 
| 8 | NULL  | ROLE_ADMIN | 
| 12 | NULL  | ROLE_BASIC | 
| 13 | NULL  | ROLE_BASIC | 
| 14 | NULL  | ROLE_BASIC | 
| 17 | NULL  | ROLE_BASIC | 
| 18 | NULL  | ROLE_BASIC | 
| 19 | NULL  | ROLE_BASIC | 
| 20 | NULL  | ROLE_BASIC | 
| 21 | NULL  | ROLE_BASIC | 
| 22 | NULL  | none  | 
| 23 | NULL  | ROLE_BASIC | 
| 24 | NULL  | ROLE_BASIC | 
| 25 | NULL  | none  | 
| 26 | NULL  | none  | 
| 27 | NULL  | ROLE_BASIC | 
| 28 | NULL  | none  | 
| 29 | NULL  | ROLE_ADMIN | 
| 30 | NULL  | ROLE_ADMIN | 
| 31 | NULL  | ROLE_BASIC | 
| 39 | NULL  | ROLE_BASIC | 
| 40 | NULL  | ROLE_USER | 
| 41 | NULL  | ROLE_USER | 
| 42 | NULL  | ROLE_USER | 
| 43 | NULL  | ROLE_ADMIN | 
| 44 | NULL  | ROLE_ADMIN | 
| 45 | NULL  | ROLE_USER | 
+----+----------+------------+ 
+0

作爲我的理解,你想使用「用戶名」一欄,如表「用戶」主鍵,在表中的「權威」 ,你會有「用戶名」列作爲表「用戶」的外鍵?或者在表格「用戶」中,您的主鍵是「ID」,「用戶名」只是唯一的! –

+0

用戶名稱在用戶只是唯一 – goofiw

回答

0

在JPA文檔中出現了一個簡單的答案。

在用戶

@OneToMany(targetEntity = Authority.class , cascade = CascadeType.ALL) 
@JoinColumn(name="username", referencedColumnName="username") 
private List<Authority> authorities 

,然後管理局

@Column(nullable = false) 
String username; 
0

JoinColumn應該是:

@JoinColumn(name="username") 

這是因爲該字段在Authority實體認定爲username

+0

我試過了,無濟於事 – goofiw

0

我認爲原因是從多方面來說,你必須使用User對象而不是String。這是我的嘗試,它的工作原理。

//用戶

@OneToMany(targetEntity = Authority.class, fetch = FetchType.EAGER, mappedBy = "user") 
private Collection<Authority> authorities; 

//管理局

@ManyToOne 
@JoinColumn(name="username", referencedColumnName = "username") 
private User user; 

結果:

enter image description here

希望這有助於!

+0

我看到,在一些文檔和其他帖子,但我很喜歡使用字符串結婚。 – goofiw