2013-10-08 95 views
0

嘗試實現Spring Security並且無法映射角色和用戶。 所以我有「用戶」,「角色」和「user_role_connector」數據庫表:休眠映射不起作用

CREATE TABLE users (
    user_pk INT NOT NULL AUTO_INCREMENT, 
    ... 
PRIMARY KEY (user_pk)); 

CREATE TABLE roles (
    role_pk INT NOT NULL AUTO_INCREMENT, 
    role VARCHAR(20) NOT NULL UNIQUE, 
PRIMARY KEY (role_pk)); 

CREATE TABLE user_role_connector (
    urc_pk INT NOT NULL AUTO_INCREMENT, 
    user_fk INT NOT NULL, 
    role_fk INT NOT NULL, 
FOREIGN KEY (user_fk) REFERENCES users(user_pk), 
FOREIGN KEY (role_fk) REFERENCES roles(role_pk), 
PRIMARY KEY (urc_pk)); 

我有實體類的角色和用戶。這兩個工作,直到我加入映射:

@Entity 
@Table(name = "users") 
public final class UserAccount { 

    private int user_pk; 
    ... 

    @OneToOne(cascade=CascadeType.ALL) 
    @JoinTable(name = "user_role_connector", 
     joinColumns  = {@JoinColumn(name = "user_fk", referencedColumnName = "user_pk")}, 
     inverseJoinColumns = {@JoinColumn(name = "role_fk", referencedColumnName = "role_pk")} 
    ) 
    private Role role; 

@Entity 
@Table(name = "roles") 
final public class Role { 

    private int role_pk; 
    private String role; 

    @OneToMany(cascade=CascadeType.ALL) 
    @JoinTable(name="user_role_connector", 
     joinColumns  = {@JoinColumn(name="role_fk", referencedColumnName="role_pk")}, 
     inverseJoinColumns = {@JoinColumn(name="user_fk", referencedColumnName="user_pk")} 
    ) 
    private Set<UserAccount> userRoles; 

爲什麼不會它映射?出現的錯誤是來自按字母順序排列的第一個控制器的bean創建錯誤,因此它必須是錯誤的映射。

那裏有沒有很好的Spring Security教程?

編輯:忘了寫類的工作,直到「角色」字段userAccount和userRoles添加角色。並且只有錯誤的代碼在這裏displayd。 Sry不好英語。

回答

1

我想,UserAccount和Role類之間存在矛盾。 UserAccount將user_role_connector表描述爲OneToOne,但Role描述與OneToMany相同的關係。

+0

是的,我們真的不希望看到一個關聯「連接表」的一對一關聯..「User.Roles」應該是多個。這可能是你錯誤的根源。 –

+0

例如,使用連接表執行OneToOne很少見,但並不少見,請參見[這裏](http://en.wikibooks.org/wiki/Java_Persistence/OneToOne#Example_of_a_OneToOne_using_a_JoinTable_database)。但是,這不是這種情況,要麼UserAcount應該是ManyToOne或角色OneToOne – Simon

+1

發現錯誤原因是錯誤的註釋放置。這也可能被打破,但會在稍後出來。 Atm連續的錯誤是在不同的主題。感謝您的幫助! – user1335163

1

錯誤是由註釋放置引起的。在這裏,我在場上使用它,而在get方法上使用它。 必須遵循一個規則!再聰明一點! :)