休眠映射不起作用

Posted

技术标签:

【中文标题】休眠映射不起作用【英文标题】:Hibernate mapping not working 【发布时间】:2013-10-16 03:02:35 【问题描述】:

试图实现 Spring Security 并且无法映射角色和用户。 所以我有“users”、“roles”和“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 的“role”字段和添加到角色的 userRoles。并且这里只显示有错误的代码。抱歉英语不好。

【问题讨论】:

【参考方案1】:

错误是由注释放置引起的。在这里,我在现场使用它,而在 get 方法上使用它。 必须遵守一条规则!再聪明一次! :)

【讨论】:

【参考方案2】:

我认为,UserAccount 和 Role 类之间存在矛盾。 UserAccount 将 user_role_connector 表描述为 OneToOne,而 Role 描述的关系与 OneToMany 相同。

【讨论】:

是的,我们真的不希望看到一对一关联的关联“连接表”。“User.Roles”应该是复数。这可能是您的错误的根源。 嗯,使用连接表执行 OneToOne 的情况很少见,但并不罕见,例如,请参阅 here。但这里不是这样,UserAcount 应该是 ManyToOne 或 Role OneToOne 发现错误原因是注释放置错误。这也可能被破坏,但稍后会出现。 Atm 持续错误是关于不同主题的。感谢您的帮助!

以上是关于休眠映射不起作用的主要内容,如果未能解决你的问题,请参考以下文章

休眠基本示例不起作用

休眠教程不起作用

如果不在事务中,休眠 session.update 不起作用

默认列值在休眠中不起作用

当使用多个数据源时,休眠环境不起作用

zeroDateTimeBehavior=convertToNull 在使用休眠的 jdbc url 中不起作用