对于多对多的关联关系处理,一种方式是使用连接表来维持两者的多对多关联关系,也就是说除去两者在数据库中相应的数据表外,还会创建第三张表用来维护两者的多对多关联关系。
一。Husband
package com.orm.model;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 10/18/11
* Time: 3:23 PM
*/
public class Husband extends DomainObject {
private String name;
private List<Wife> wifes;
public Husband(String name, List<Wife> wifes) {
this.name = name;
this.wifes = wifes;
}
public Husband(String name) {
this.name = name;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field">
<class name="com.orm.model.Husband" table="husband">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String"/>
<bag name="wifes" table="couple" cascade="all">
<key column="husbandid"/>
<many-to-many column="wifeid" class="com.orm.model.Wife"/>
</bag>
</class>
</hibernate-mapping>
二。Wife
package com.orm.model;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 10/18/11
* Time: 3:23 PM
*/
public class Wife extends DomainObject{
private String name;
private List<Husband> husbands;
public Wife(String name) {
this.name = name;
}
public Wife(String name, List<Husband> husbands) {
this.name = name;
this.husbands = husbands;
}
}
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping default-access="field">
<class name="com.orm.model.Wife" table="wife">
<id name="id" column="id" type="java.lang.Integer">
<generator class="native"/>
</id>
<property name="name" column="name" type="java.lang.String"/>
<bag name="husbands" table="couple" cascade="all">
<key column="wifeid"/>
<many-to-many column="husbandid" class="com.orm.model.Husband"/>
</bag>
</class>
</hibernate-mapping>
三。测试代码
package com.orm;
import com.orm.model.Husband;
import com.orm.model.Wife;
import com.orm.service.CoupleService;
import junit.framework.TestCase;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import java.util.ArrayList;
import java.util.List;
/**
* Created by IntelliJ IDEA.
* User: Zhong Gang
* Date: 10/18/11
* Time: 3:40 PM
*/
public class HibernateManyToManyTest extends TestCase {
private CoupleService coupleService;
@Override
public void setUp() throws Exception {
ApplicationContext context = new ClassPathXmlApplicationContext("classpath:testDataSource.xml");
coupleService = (CoupleService) context.getBean("coupleService");
}
public void testManyToMany() throws Exception {
Wife wife1 = new Wife("wife1");
Wife wife2 = new Wife("wife2");
Wife wife3 = new Wife("wife3");
List<Wife> wifes = new ArrayList<Wife>();
wifes.add(wife1);
wifes.add(wife2);
wifes.add(wife3);
Husband husband = new Husband("husband", wifes);
coupleService.saveOrUpdate(husband);
Husband husband1 = new Husband("husband1");
Husband husband2 = new Husband("husband2");
Husband husband3 = new Husband("husband3");
List<Husband> husbands = new ArrayList<Husband>();
husbands.add(husband1);
husbands.add(husband2);
husbands.add(husband3);
Wife wife = new Wife("wife", husbands);
coupleService.saveOrUpdate(wife);
}
}
测试结果及截图
附上源码以供参考
- 大小: 38.1 KB
- 大小: 15.6 KB
- 大小: 12 KB
分享到:
相关推荐
NULL 博文链接:https://dreamzhong.iteye.com/blog/1201437
15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类集合 15.3.4 把多对多关联分解为两个一对多关联 15.4 小结 15.5 思考题 第16章 Hibernate的检索...
15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类集合 15.3.4 把多对多关联分解为两个一对多关联 15.4 小结 15.5 思考题 第16章 Hibernate的检索...
15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类集合 15.3.4 把多对多关联分解为两个一对多关联 15.4 小结 15.5 思考题 第16章 Hibernate的检索...
15.3 映射双向多对多关联关系 15.3.1 关联两端使用元素 15.3.2 在inverse端使用元素 15.3.3 使用组件类集合 15.3.4 把多对多关联分解为两个一对多关联 15.4 小结 15.5 思考题 第16章 Hibernate的检索...
一般在做双向多对一(一对多)关联关系映射的时候,一般会设置让一的一方放弃对关联关系的维护,以减少不必要的更新语句 一对一: 基于外键的一对一 Wife Husband id id name name h_id references Husband...
7. 表字段要少,表关联不要怕多,有二级缓存撑腰 7. Struts工作机制?为什么要使用Struts? 工作机制: Struts的工作流程: 在web应用启动时就会加载初始化ActionServlet,ActionServlet从 struts-config.xml文件中...
10.5.9 对关联实体进行排序 424 10.6 继承关系映射 426 10.6.1 整个类层次对应一张表的 映射策略 427 10.6.2 连接子类的映射策略 430 10.6.3 每个具体类对应一张表的 映射策略 434 10.7 使用抽象实体和非实体父类 ...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
{8}多线程}{121}{chapter.8} {8.1}线程的常用属性与方法}{121}{section.8.1} {8.2}后台线程}{123}{section.8.2} {8.3}创建线程的两种方法}{123}{section.8.3} {8.4}Runnable}{123}{section.8.4} {8.5}Sleep...
12、写Hibernate的一对多和多对一双向关联的orm配置? 9、hibernate的inverse属性的作用? 13、在DAO中如何体现DAO设计模式? 14、spring+Hibernate中委托方案怎么配置? 15、spring+Hibernate中委托方案怎么配置? ...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中委托...
12、写Hibernate的一对多和多对一双向关联的orm配置? 122 9、hibernate的inverse属性的作用? 122 13、在DAO中如何体现DAO设计模式? 123 14、spring+Hibernate中委托方案怎么配置? 123 15、spring+Hibernate中...
12、写Hibernate的一对多和多对一双向关联的orm配置? 134 9、hibernate的inverse属性的作用? 134 13、在DAO中如何体现DAO设计模式? 134 14、spring+Hibernate中委托方案怎么配置? 134 15、spring+Hibernate中委托...