【SSH三个框架】Hibernate第十篇基础:inverse属性具体解释
inverse后经常用于双向1—N在相关性。它也可以在使用N—N该协会,这里,例如用双1—N联想
或两个与各部门及工作人员,两javabean没有写。
首先,我们的员工看映射文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.itcast.hibernate.domain">
<class name="Employee" table="tb_Employee">
<id name="id">
<generator class="native"/>
</id>
<property name="name" />
<many-to-one name="depart" column="depart_id" />
</class> </hibernate-mapping>
然后,是部门的映射文件:
<? xml version="1.0"? >
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.itcast.hibernate.domain"> <class name="Department" table="tb_Department">
<id name="id">
<generator class="native"/>
</id>
<property name="name" /> <set name="emps">
<key column="depart_id" />
<one-to-many class="Employee" />
</set>
</class> </hibernate-mapping>
此时。在部门的映射文件的set标签中,我们未用inverse属性,接下来我们写一个測试类看看情况:
package cn.itcast.hibernate; import java.util.HashSet;
import java.util.Set; import org.hibernate.Hibernate;
import org.hibernate.Session;
import org.hibernate.Transaction; import cn.itcast.hibernate.domain.Department;
import cn.itcast.hibernate.domain.Employee; public class Many2One {
public static void main(String[] arg){
Department depart = add();
} static Department add(){
Session s = null;
Transaction tx = null;
try{
Department depart = new Department();
Department depart1 = new Department();
depart.setName("depart name"); Employee emp1 = new Employee();
emp1.setDepart(depart); //建立两个对象的关联关系
emp1.setName("emp name"); Employee emp2 = new Employee();
emp2.setDepart(depart); //建立两个对象的关联关系
emp2.setName("emp name"); Set<Employee> emps = new HashSet<Employee>(); emps.add(emp1);
emps.add(emp2);
depart.setEmps(emps); s = HibernateUtil.getSession();
tx = s.beginTransaction(); s.save(depart);
s.save(emp1);
s.save(emp2);
System.out.println(depart.getEmps().size()); tx.commit();
return depart;
}finally{
if(s!=null){
s.close();
}
}
}
}
我们看下程序:首先建立了一个Department对象,并建立了两个Employee对象,而且分别为这两个Employee对象设置depart。
然后,我们建立了一个Set集合存放这两个Employee对象。然后把这个集合注入给Department对象depart。如今。在数据库中是一对多,在Hibernate关系中。部门能够知道有哪些员工,员工知道属于哪个部门。
我们看一下MyEclipse打印出来的sql语句:
Hibernate: insert into tb_Department (name) values (?)
Hibernate: insert into tb_Employee (name, depart_id) values (?, ? )
Hibernate: insert into tb_Employee (name, depart_id) values (? , ?)
2
Hibernate: update tb_Employee set depart_id=? where id=? Hibernate: update tb_Employee set depart_id=? where id=?
我们看到,第一、二、三行是三条插入语句,分别插入1个Department和2个Employee,在第四行打印出来了Department对象拥有的员工的size()个数。可是在最下边两行出现了两条update语句,这两条update语句是我们在代码中把set集合注入给Department对象depart:
当双向1—N关联的时候。1的一端想要维护关系,N的一端也想要维护关系,在1的一端先插入,N的一端后插入之后,还要为N的一端外键再更新成为1的一端的id。所以会多出两条update语句。
可是,假设我们在部门映射文件里的set标签增加inverse="true"的属性后,这两条update语句就会消失。我们改动下部门映射文件:
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC
"-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping
package="cn.itcast.hibernate.domain"> <class name="Department" table="tb_Department">
<id name="id">
<generator class="native"/>
</id>
<property name="name" /> <set name="emps" inverse="true" >
<key column="depart_id" />
<one-to-many class="Employee" />
</set>
</class> </hibernate-mapping>
我们再測试一下会打印出哪些sql语句:
Hibernate: insert into tb_Department (name) values (?)
Hibernate: insert into tb_Employee (name, depart_id) values (?, ? )
Hibernate: insert into tb_Employee (name, depart_id) values (? , ?)
2
这里的两条update语句已经是不见了。
这是由于1的一端不再控制关联关系。
inverse=“true”演出1该协会的最终不再控制
版权声明:本文博客原创文章,博客,未经同意,不得转载。
【SSH三个框架】Hibernate第十篇基础:inverse属性具体解释的更多相关文章
- SSH环境搭建之Hibernate环境搭建篇
SSH环境搭建之Hibernate环境搭建篇 搭建有两种方式: 1.使用IntelliJ IDEA或者MyEclipse的逆向工程(关系模型 -> 对象模型),我使用的是IntelliJ IDE ...
- Hibernate第十篇【Hibernate查询详解、分页查询】
前言 在Hibernate的第二篇中只是简单地说了Hibernate的几种查询方式-.到目前为止,我们都是使用一些简单的主键查询阿-使用HQL查询所有的数据-.本博文主要讲解Hibernate的查询操 ...
- Hibernate第五篇【inverse、cascade属性详解】
前言 上一篇博文已经讲解了一对多和多对一之间的关系了,一对多和多对一存在着关联关系(外键与主键的关系).本博文主要讲解Inverse属性.cascade属性.这两个属性对关联关系都有影响 Invers ...
- hibernate笔记--cascade级联以及inverse属性
cascade : 不管是单向多对一还是一对多,或者是双向的一对多关系,在一的一端映射文件中有一个set标签,在多的一端有many-to-one标签,拿前几篇笔记里讲的Grade和Student举例, ...
- 【SSH三个框架】Hibernate第七基金会:不少下属业务
相对于上述一关系,在这里,下一个一对多关系说明. 另外,在上述.我们描述了许多人描述的一一对应关系.在关系数据库是多对一的关系,但也有许多关系.但,只知道它是不够的,Hibernate它是一种面向对象 ...
- 【SSH三个框架】Hibernate第八部分基础:经营-many关系
在Hibernate在-many关系.它通常不使用.由于当数据库查询复杂度太高时. 我们在这里做的是学生和教师,学生可以有多个老师,教师可以有多个学生. watermark/2/text/aHR0cD ...
- SSH三种框架及表示层、业务层和持久层的理解
Struts(表示层)+Spring(业务层)+Hibernate(持久层) SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层) Struts:Struts是一个表示 ...
- SSH三种框架及表示层、业务层和持久层的理解(转)
Struts(表示层)+Spring(业务层)+Hibernate(持久层) SSH:Struts(表示层)+Spring(业务层)+Hibernate(持久层) Struts:Struts是一个表示 ...
- 写了好多次SSH现在对于框架还是有一定的基础了,但是对于框架下我们该如何进行操作呢???
首先,对于一个老手来说,我们最快捷的就是ctrl+c和ctrl+v,但是我们自己应该复制哪一些代码呢? 1.在我们导完包之后,我们需要写的就是web.xml,在其中,我们要有过滤器及映射和监听器. w ...
随机推荐
- 【Linux探索之旅】第一部分第六课:Linux如何安装在虚拟机中
内容简介 1.第一部分第六课:Linux如何安装在虚拟机中 2.第二部分第一课预告:终端Terminal,好戏上场 Linux如何安装在虚拟机中 虽然我们带大家一起在电脑的硬盘上安装了Ubuntu这个 ...
- 答读者问(8):相关Java问题涉及到学习
近来的,我收到一个研究生朋友的电子邮件,一般内容如下面: 日 (本人微博:http://weibo.com/zhouzxi?topnav=1&wvr=5,我们的聊天号码:245924426.欢 ...
- 离PACKET_INp获取信息acket data
于Floodlight模块假设要packet in消息,就对对应的消息类型进行监听就可以.然后在receive方法中就能够操纵这个上传上来的packet_in. 关键代码: E ...
- Effective C++笔记05:实现
条款26:尽可能延后变量定义式的出现时间 博客地址:http://blog.csdn.net/cv_ronny 转载请注明出处! 有些对象,你可能过早的定义它,而在代码运行的过程中发生了导常,造成了開 ...
- Oracle Applications Multiple Organizations Access Control for Custom Code
档 ID 420787.1 White Paper Oracle Applications Multiple Organizations Access Control for Custom Code ...
- poj 2762 Going from u to v or from v to u? (推断它是否是一个薄弱环节图)
意甲冠军:给定一个有向图有m单向边缘.免费推断是否两点起来(a可以b要么b可以a或最多彼此),该请求 弱联通重量. 算法: 缩点求强连通分量.然后又一次建图.推断新图是否是一条单链,即不能分叉,假设分 ...
- [ACM] HUST 1017 Exact cover (Dancing Links,DLX模板题)
DESCRIPTION There is an N*M matrix with only 0s and 1s, (1 <= N,M <= 1000). An exact cover is ...
- Demo of Python "Map Reduce Filter"
Here I share with you a demo for python map, reduce and filter functional programming thatowned by m ...
- iOS经常使用类别
我们发现,慢慢积累了很多自己写的各种类别的. .今天,无私.张贴 1.NSDateFomatter @interface NSDateFormatter (MyCategory) + (id)date ...
- Sqlserver2000联系Oracle11G数据库进行实时数据的同步
Sqlserver2000联系Oracle11G数据库进行实时数据的同步 1,前提条件 我有sqlserver2000环境,已经存在oracle11g环境,准备这两个数据库,建立各自的訪问账号,两者之 ...