一开始建表语句是这样:
<pre name="code" class="sql">use test;
create table db_1(did int not null,dbname varchar(50),dbdes varchar(50),primary key(did))ENGINE = InnoDB;
create table db_2(did int not null,dbname varchar(50),dbdes varchar(50),primary key(did))ENGINE = InnoDB;
alter table db_2 add index FK2E7B10F83A3F5F (did), add constraint FK001 foreign key(did) references db_1(did);
然后进行插入操作时一直报错:
Cannot add or update a child row: a foreign key constraint fails (`test`.`db_2`, CONSTRAINT `FK001` FOREIGN KEY (`did`) REFERENCES `db_1` (`did`))
一般这种错误是因为表之间相互引用外键造成死锁,目前的解决方法是把外键删除,依靠hibernate中的相关配置来实现主外键关联
use test;
create table db_1(did int not null,dbname varchar(50),dbdes varchar(50),primary key(did))ENGINE = InnoDB;
create table db_2(did int not null,dbname varchar(50),dbdes varchar(50),primary key(did))ENGINE = InnoDB;
进行下面操作就能插入了:
public static void main(String[] args){
Db_1 db_1 = new Db_1();
db_1.setDid(4);
db_1.setDbname("db_1");
db_1.setDbdes("No.1");
Db_2 db_2 = new Db_2();
db_2.setDbname("db_2");
db_2.setDbdes("No.2");
db_2.setDb_1(db_1);;
Configuration cfg = new Configuration();
SessionFactory sf = cfg.configure().buildSessionFactory();
Session session = sf.openSession();
session.beginTransaction();
session.save(db_2);
session.save(db_1);
session.getTransaction().commit();
session.close();
sf.close();
}
不明白为什么会这样,网上还有书上的教程里数据库建了外键也一样可以进行插入操作的,再找找原因...