Hibernate:one-to-one 主外键关联

一开始建表语句是这样:

<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(); 
	}

不明白为什么会这样,网上还有书上的教程里数据库建了外键也一样可以进行插入操作的,再找找原因...

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值