今天使用Hibernate的時(shí)候,它會(huì)自動(dòng)幫助建立表外鍵肠套,但是報(bào)錯(cuò)了舰涌,仔細(xì)一看問題出在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 關(guān)聯(lián) category.id 瓷耙;
出錯(cuò)的原因在于2個(gè)字段的int的類型不同,article.category_id 有 unsigned 屬性刁赖,而 category.id 沒有這個(gè)屬性搁痛。
最終category表的結(jié)構(gòu)如下:
<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>