今天使用Hibernate的时候,它会自动帮助建立表外键,但是报错了,仔细一看问题出在MySQL上,原因如下:
分类表:
<code>
CREATE TABLE category
(
id
int(11) NOT NULL AUTO_INCREMENT,
name
varchar(255) DEFAULT NULL,
sort
int(11) NOT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</code>
文章表:
<code>
CREATE TABLE article
(
id
int(10) unsigned NOT NULL AUTO_INCREMENT,
category_id
int(10) unsigned NOT NULL DEFAULT '0',
title
varchar(45) NOT NULL DEFAULT '',
content
text NOT NULL,
status
tinyint(4) NOT NULL DEFAULT '0',
create_time
int(10) unsigned NOT NULL DEFAULT '0',
update_time
int(10) unsigned NOT NULL DEFAULT '0',
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</code>
外键是,article.category_id 关联 category.id ;
出错的原因在于2个字段的int的类型不同,article.category_id 有 unsigned 属性,而 category.id 没有这个属性。
最终category表的结构如下:
<code>
CREATE TABLE category
(
id
int(11) unsigned NOT NULL AUTO_INCREMENT,
name
varchar(255) DEFAULT NULL,
sort
int(11) NOT NULL,
PRIMARY KEY (id
)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
</code>