2013-10-08 150 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方法上使用它。 必须遵循一个规则!再聪明一点! :)