Hibernate inverse的属性介绍
来源:互联网 发布:建筑结构用什么软件 编辑:程序博客网 时间:2024/06/09 17:05
inverse是hibernate双向关系中的概念。inverse的作用就是指定由哪一方来维护之间的关联关系。
示例
Stu表
public class Stu implements java.io.Serializable { private Integer sid; private Stuclass stuclass; private String sname;}
<hibernate-mapping> <class name="entity.Stu" table="STU" schema="GC"> <id name="sid" type="java.lang.Integer"> <column name="SID" precision="5" scale="0" /> <generator class="assigned" /> </id> <many-to-one name="stuclass" class="entity.Stuclass" fetch="select"> <column name="CLASSID" precision="5" scale="0" /> </many-to-one> <property name="sname" type="java.lang.String"> <column name="SNAME" length="20" /> </property> </class></hibernate-mapping>
StuClass表
public class Stuclass implements java.io.Serializable { private Integer cid; private String cname; private Set stus = new HashSet(0);}
<hibernate-mapping> <class name="entity.Stuclass" table="STUCLASS" schema="GC"> <id name="cid" type="java.lang.Integer"> <column name="CID" precision="5" scale="0" /> </id> <property name="cname" type="java.lang.String"> <column name="CNAME" length="20" /> </property> <set name="stus" inverse="false" cascade="save-update"> <key> <column name="CLASSID" precision="5" scale="0" /> </key> <one-to-many class="entity.Stu" /> </set> </class></hibernate-mapping>
inverse属性只在一的一方的set标签中有此属性,在多的一方many-to-one标签中无此属性,默认值为inverse=”false”,即由自己一方来维护双方的关系。
举例说明:
当新增一个StuClass对象时,级联新增当前对象里包含的Stu对象
Session session = HibernateSessionFactory.getSession(); Transaction tx = session.beginTransaction(); Stu stu = new Stu(1,"测试"); Stuclass sc= new Stuclass(10,"一年级"); sc.getStus().add(stu); session.save(sc); tx.commit();
hibernate会发出4条sql语句
Hibernate: select stu_.SID, stu_.CLASSID as CLASSID1_, stu_.SNAME as SNAME1_ from GC.STU stu_ where stu_.SID=?Hibernate: insert into GC.STUCLASS (CNAME, CID) values (?, ?)Hibernate: insert into GC.STU (CLASSID, SNAME, SID) values (?, ?, ?)Hibernate: update GC.STU set CLASSID=? where SID=?
第一条是查询新增的Stu对象是否存在
第二条是插入新增的StuClass信息
第三条是插入新增的Stu的信息
因为我们设置了inverse=false,代表由StuClass来维护双方关系,所以新增StuClass对象是,又发出了第四条更新语句来维护双方的关系。
如果把inverse设置为true,代表由另一方来维护。
那么执行代码:
Hibernate: select stu_.SID, stu_.CLASSID as CLASSID1_, stu_.SNAME as SNAME1_ from GC.STU stu_ where stu_.SID=?Hibernate: insert into GC.STUCLASS (CNAME, CID) values (?, ?)Hibernate: insert into GC.STU (CLASSID, SNAME, SID) values (?, ?, ?)
只会发出3条语句,那么那条更新的SQL语句的作用是什么呢?
看看数据库:
Stu表里classid未插入数据!由于我们保存的StuClass对象里的Stu对象并没有classid的数据,所以新增时为空,而设置了inverse=false的时候,主动方维护了两表的关系,把新增后的Stu对象的空的classid的值更新成了关联表的ID。
0 0
- Hibernate inverse的属性介绍
- Hibernate的inverse,cascade属性简单介绍
- 【Hibernate】的Inverse属性
- Hibernate中inverse属性-详细介绍
- hibernate 的inverse 属性和cascade 属性
- Hibernate的inverse属性的用法实战
- Hibernate 中 元素的inverse 属性分析
- Hibernate的Cascade和Inverse属性
- hibernate的级联、延迟加载、inverse属性
- Hibernate的Inverse和cascade属性
- Hibernate中inverse属性的应用
- hibernate映射中inverse属性的使用
- hibernate的inverse和cascade属性
- 在 Hibernate 中inverse的属性
- Hibernate inverse 属性
- hibernate inverse属性
- Hibernate--inverse属性
- Hibernate Inverse属性
- PHP内核的存储机制(分离/改变)
- java 后台文件下载
- Linux杂七杂八
- tomcat和nginx的上传文件失败的解决方法
- nodejs npm常用命令
- Hibernate inverse的属性介绍
- iOS tableview分割线及点击效果处理方案
- 浅谈Android 兼容性测试
- 【android studio】 gradle配置成本地离线zip包
- cocos环境搭建教程
- 安卓Fragment 碎片!!!
- 51nod1719数值计算+二分
- [解读小程序]灵犀新闻客户端
- Android:MVP模式例子