Hibernate ManyToOne验证模式验证错误启动WildFly

时间:2016-04-20 10:04:45

标签: java hibernate hibernate-mapping ejb-3.1 wildfly-10

我有一个问题,我花了很多时间试图解决这个问题,我无法提出任何其他可能的解决方案,我真的需要你的帮助,看看我是否遗漏了某些东西这里....

表SYS_USER和SYS_ROLE分别具有OneToMany关系和ManyToOne,看起来如下(我只粘贴相关信息)

SysRole.java

@ManyToOne(fetch=FetchType.LAZY)
@JoinColumn(name="user_name", nullable=false)
public SysUser getSysUser() {
    return this.sysUser;
}

public void setSysUser(SysUser sysUser) {
    this.sysUser = sysUser;
}

SysUser.java

@OneToMany(fetch=FetchType.LAZY, mappedBy="sysUser")
public Set<SysRole> getSysRoles() {
    return this.sysRoles;
}

public void setSysRoles(Set<SysRole> sysRoles) {
    this.sysRoles = sysRoles;
}

数据库如下所示:

CREATE TABLE `SYS_ROLE` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`user_name` varchar(45) NOT NULL,
`role_name` varchar(45) NOT NULL,
`role_type` varchar(10) NOT NULL,
PRIMARY KEY (`id`),
KEY `FK_USERS` (`user_name`),
CONSTRAINT `FK_USERS` FOREIGN KEY (`user_name`) REFERENCES `SYS_USER`
(`user_name`) ON DELETE NO ACTION ON UPDATE NO ACTION) 
ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;

CREATE TABLE `SYS_USER` (
`user_id` int(10) unsigned zerofill NOT NULL AUTO_INCREMENT,
`user_name` varchar(45) NOT NULL,
`user_password` varchar(200) DEFAULT NULL,
`user_first_name` varchar(45) DEFAULT NULL,
`user_last_name` varchar(45) DEFAULT NULL,
`user_email` varchar(45) DEFAULT NULL,
PRIMARY KEY (`user_id`),
UNIQUE KEY `user_name_UNIQUE` (`user_name`),
UNIQUE KEY `user_id_UNIQUE` (`user_id`)) 
ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=latin1;

我在服务器启动时遇到的错误是:

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException:
Schema-validation: wrong column type encountered in 
column [user_name]
in table [SYS_ROLE]; 
found [varchar (Types#VARCHAR)], 
but expecting [integer (Types#INTEGER)]

我可以验证将主键从字段ID移动到&#39; SYS_USER.user_id&#39; 字段,解决了问题,但理想情况下我更喜欢 &#39; SYS_USER.user_name&#39; 不会是PK,因为它必须不时更改(仍然应该是唯一的)。

所有实体都已通过Hibernate Reveng自动生成,没有特定设置或在文件中重新映射。

非常感谢! 戴夫

0 个答案:

没有答案