Hibernate的many-to-many双向关联的配置办法
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<!-- Generated 2016-1-25 16:18:31 by Hibernate Tools 3.5.0.Final -->
<hibernate-mapping package="cn.opfo.app.domain">
<class name="Person" table="t_person">
<id name="id" type="java.lang.Integer">
<column name="ID" />
<generator class="native" />
</id>
<property generated="never" lazy="false" name="name"
type="java.lang.String">
<column name="NAME" />
</property>
<property generated="never" lazy="false" name="passowrd"
type="int">
<column name="PASSOWRD" />
</property>
<property generated="never" lazy="false" name="birthDay"
type="java.util.Date">
<column name="BIRTHDAY" />
</property>
<!--
table不配置时,可正常创建但多出一个无用表,但在通过主表查询从表时会
因找主表对应创建的表而无法找到对应从表而出现异常。
所以建议二个表都要配置中间关联表,且名称一致。
inverse配置方法:因为有级联,所以无需二个对象都来提交
此处在配置文件中需要在Person表的Set配置片段设定inverse="false",即由Person表管理级联关系
而在Address对象的Set配置片段设定inverse="true",即同意级联关系交给Person对象进行管理
通常二者设定相反,由设定inverse="false"的一方控制级联关系
反之亦然
如果设定相同,则在CUID中双方都要对数据进行处理,即失去级联的意义了。
-->
<set name="addressSet" cascade="all" inverse="false" table="person_join_address">
<!-- key指定关联关系列,是本对象ID对应在中间表中的索引列 -->
<key column="p_id" />
<!-- 指定另一对象(Set集合)中ID在中间表中所对应的索引列(对象名+属性名)-->
<many-to-manyclass="Address" column="a_id"/>
</set>
</class>
<class name="Address" table="t_address">
<id name="id">
<column name="ID" />
<generator class="native"/>
</id>
<property generated="never" lazy="false" name="descs"
type="java.lang.String">
<column name="DESCS" />
</property>
<property generated="never" lazy="false" name="code" type="int">
<column name="CODE" />
</property>
<!--
table不配置时,可正常创建但多出一个无用表,但在通过主表查询从表时会
因找主表对应创建的表而无法找到对应从表而出现异常。
所以建议二个表都要配置中间关联表,且名称一致。
inverse配置方法:因为有级联,所以无需二个对象都来提交
此处在配置文件中需要在Person表的Set配置片段设定inverse="false",即由Person表管理级联关系
而在Address对象的Set配置片段设定inverse="true",即同意级联关系交给Person对象进行管理
通常二者设定相反,由设定inverse="false"的一方控制级联关系
反之亦然
如果设定相同,则在CUID中双方都要对数据进行处理,即失去级联的意义了。
-->
<set name="personSet" cascade="all" inverse="true" table="person_join_address">
<!-- key指定关联关系列,是本对象ID对应在中间表中的索引列 -->
<key column="a_id"/>
<!-- 指定另一对象(Set集合)中ID在中间表中所对应的索引列(对象名+属性名)-->
<many-to-many class="Person"column="p_id"/>
</set>
</class>
</hibernate-mapping>
* Junit测试代码
*/
private SessionFactory sFactory;
Session session;
Transaction tx;
/*
* 测试前进行初始化
*/
public void setUp() throws Exception {
System.out.println("-----初始化数据------");
Configuration config = new Configuration().configure();
// ServiceRegistry sr = new
// StandardServiceRegistryBuilder().applySettings(config.getProperties()).build();
// sFactory = config.buildSessionFactory(sr);
sFactory = config.buildSessionFactory();
session = sFactory.openSession();
}
* 测试之后释放数据
*/
@After
public void tearDown() throws Exception {
System.out.println("-----释放化数据------");
if (session.isOpen()) {
session.close();
}
}
@Test
public void testOne2OneII(){
//定义人的集合
Set<Person> pSet = new HashSet<>();
Person p1 = new Person("wanglifu",134324,new Date());
Person p2 = new Person("wanglili",434321,new Date());
pSet.add(p1);
pSet.add(p2);
//定义地址的集合
Set<Address> aSet = new HashSet<Address>();
Address a1 = new Address("江苏盐城", 224562);
Address a2 = new Address("江苏南京", 224556);
aSet.add(a1);
aSet.add(a2);
//每个人和多个地址关联
p1.setAddressSet(aSet);
p2.setAddressSet(aSet);
//每个地址与多人建立关联
// a1.setPersonSet(pSet);
// a2.setPersonSet(pSet);
tx = session.beginTransaction();
//因为有级联,所以无需二个对象都来提交
//此处在配置文件中需要在Person表的Set配置片段设定inverse="false",即由Person表管理级联关系
//而在Address对象的Set配置片段设定inverse="true",即同意级联关系交给Person对象进行管理
//二者设定相反,由设定inverse="false"的一方控制级联关系
//反之亦然
session.persist(p1);
session.persist(p2);
// session.persist(a1);
// session.persist(a2);
tx.commit();
}
Hibernate的many-to-many双向关联的配置办法的更多相关文章
- Hibernate多对多双向关联的配置
Hibernate的双向多对多关联有两种配置方法:那我们就来看看两种方案是如何配置的. 一.创建以各自类为类型的集合来关联 1.首先我们要在两个实体类(雇员<Emploee>.工程< ...
- Hibernate(六)一对一双向关联映射
在上次的博文Hibernate从入门到精通(五)一对一单向关联映射中我们讲解了一下一对一单向关联映射, 这次我们继续讲解一下与之对应的一对一双向关联映射. 一对一双向关联 与一对一单向关联映 射所不同 ...
- ORM框架Hibernate (四) 一对一单向、双向关联映射
简介 在上一篇博客说了一下多对一映射,这里再说一下一对一关联映射,这种例子在生活中很常见,比如一个人的信息和他的身份证是一对一.又如一夫一妻制等等. 记得在Java编程思想上第一句话是“一切皆对象”, ...
- 【Hibernate步步】--一对一映射双向关联具体解释(两)
很抱歉.有两天没更新博客文章,不要写文章一天真的感觉很是空的啊.制定一个写作习惯,想改也改不掉啊.说点题外话,前两天我收到一封私人信件给朋友,我写邀请函的文章OWS文章.一种技术用于研究图标工具,这位 ...
- Hibernate多对多映射(双向关联)实例详解——真
一个学生可以选多门课 一门课程有多个学生上 实现步骤: 一.学生 (1)数据库创建学生数据表students,包含id,name字段 设置id字段为主键,类型:bigint,自增 设置name字段,类 ...
- Hibernate一对一外键双向关联(Annotation配置)
如上图所示:一个学生有一个学生证号,一个学生证号对应一名学生.在Hibernate中怎么用Annotation来实现呢? 学生类,主键是id:学生证的主键也是Id: Student.java pack ...
- grails一对多双向关联
前面分享了一些学习grails的心得,可是grails的知识还远不止这些,这次整理了一点有关grails一对多双向关联关系的知识.我认为这样的关联用的地方太多了,这次准备的样例是城市和区域的相关样例. ...
- hibernate多对一双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
- hibernate一对一外键双向关联
关联是类(类的实例)之间的关系,表示有意义和值得关注的连接. 本系列将介绍Hibernate中主要的几种关联映射 Hibernate一对一主键单向关联Hibernate一对一主键双向关联Hiberna ...
随机推荐
- Linux系统软件
ubuntu系统镜像文件: http://pan.baidu.com/s/1jGGgszO 虚拟机: http://pan.baidu.com/s/1hqrhQQg
- Animation小问题整理
1.在动画播放中改变层级内容的名字,不会造成动画内容映射的改变. 2.Animator动画剪辑层级没问题,但是不播放 检查是否Mask损坏,FBX文件的Animations选项下面有个Mask.Uni ...
- StudyFoxCMS-6
1.phpstrom中安装emmet File=>Settings=>Plugins=>右侧搜索框搜索“emmet”=>点击下方中间按钮“Browse repositories ...
- php中的json_encode()和json_decode()函数的一些说明
一,json语法( php中的json_decode($json)中的$json要符合json语法格式 ) ① JSON可以表示三种类型的值 1,简单值.包括整型,字符串型,布尔值和null.例如:5 ...
- 配置eclipse集成开发环境_编译_调试
1. 因为eclipse是基于Java运行,所以在运行Eclipse之前,需要安装Java SE,对于Java SE,需要Java SE6 JRE系列的版本,可以在这个位置下载: Java SE 6只 ...
- eventloop & actor模式 & Java线程模型演进 & Netty线程模型 总结
eventloop的基本概念可以参考:http://www.ruanyifeng.com/blog/2013/10/event_loop.html Eventloop指的是独立于主线程的一条线程,专门 ...
- 页面加载后resize页面布局
在我们写web的时候,有的时候页面加载完以后,布局位置有一些问题,手动改变窗口大小后则正常显示位置. 其实,我们手动改变窗口大小,是执行了resize方法. share一下兼容方法: coffee c ...
- OpenGL的glTexImage2D()与gluBuild2DMipmaps()的使用方法及区别
OpenGL的glTexImage2D()与gluBuild2DMipmaps()的使用方法及区别 说明:两者的都是生成纹理,即:将载入的位图文件(*.bmp)转换成纹理贴图. 1.glTexImag ...
- 如何解决EditText使用时,点击外侧系统键盘不消失的bug
在使用viewPager和EditText一起使用的时候,突然出现了一个bug,在点击EditText(此EditText是在ViewPager的Fragment中) 我在切换ViewPager的时候 ...
- jquery.SuperSlide.2.1.2--轮播(兼容到IE7 适用于整屏)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...