Hibernate框架的外键维护问题

外键维护

当使用Hibernate框架处理多表关联问题时,会遇到外键维护问题!也就是对应于<many-to-one><set>标签中的inverse属性,该属性是用于指出是否不参与外键维护,默认值为false!举例说明,当把主键映射配置文件中set标签的inverse属性设置为true时,主键所对应的对象就不参与外键维护,也就是说主键不会执行update语句,用于维护外键!

SQL优化

由于Hibernate并不知道每一句SQL语句的具体含义,它只是在底层根据代码执行情况,进行了机械的SQL拼接并执行SQL!所以会出现很多并不必要的SQL执行,这无疑会造成SQL性能的浪费!所以在编程中应尽量减少不必要的SQL执行!

举个例子:用户与订单是一对多的关系,当我们使用Hibernate保存数据时,假设用户与订单都已相互设置关联且用户与订单都能维护外键(即inverse=false),那么根据不同的代码执行逻辑会执行不同数量的SQL语句!

session.save(order_1);

session.save(order_2);

session.save(customer);

按照这个执行顺序,会执行7条SQL语句,分别为3条INSERT语句(用于向数据库插入数据),4条UPDATE语句(订单两条,用户两条分别用于维护外键).

session.save(customer);

session.save(order_1);

session.save(order_2);

而当我们先存储用户(主键),会执行5条SQL语句,分别为3条INSERT语句(用于向数据库插入数据),2条UPDATE语句(用户发送的两条用于维护外键.

而当我们去除用户中的订单数据(即去除外键),再按以上顺序进行数据存储时,就只会执行3条SQL语句.

所以,根据以上现象,我们可以得出Hibernate维护外键的规律.

在inverse均为false的情况下:

对于主键(主表)对象:

 1/配置条件,即已在主键配置文件中配置了外键信息;

 2/向主键对象中添加外键对象(对应在用户中添加订单信息);

只要满足这两条,主键便会维护外键

对于外键(从表)对象:

 1/配置条件,即已在主键配置文件中配置了外键信息;

 2/向主键对象中添加外键对象(对应在用户中添加订单信息);

 3/外键对象(订单)缺失数据(一般都是缺失外键信息);

只有满足以下三个条件,从表对象才会维护外键,即发送UPDATE语句.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值