对于多对多的关联关系处理,一种方式是使用连接表来维持两者的多对多关联关系,也就是说除去两者在数据库中相应的数据表外,还会创建第三张表用来维护两者的多对多关联关系。
一。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
分享到:
相关推荐
“Hibernate ORM - 一对多双向连接表关联关系”这个标题指出我们要讨论的是Hibernate ORM框架中的一种特定数据库关联模型,即一对多的双向关联。在Hibernate中,ORM(对象关系映射)是一种技术,它允许我们用面向...
本文将深入探讨Hibernate ORM中的一个关键概念:多对多双向中间实体关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生之间的关联等。 首先,多对多关联意味着两个实体类之间存在多个...
在本篇【myeclipse试用小记----Hibernate多对一双向关联(2)】中,博主主要探讨了使用MyEclipse集成开发环境与Hibernate框架进行多对一双向关联的配置与实现。MyEclipse是Eclipse的一个强大扩展,特别适合Java Web...
"多对多双向关联"是Hibernate中一种关系映射类型,涉及两个实体类之间的复杂关联。在数据库设计中,多对多关系意味着一个实体可以与多个其他实体相关联,反之亦然。例如,学生可以选修多门课程,课程也可以被多名...
- **多对多连接表关联**:多对多关系通常通过一个连接表来实现,连接表中包含两个外键,分别指向相关联的两个实体的主键。 #### 映射关系的方向 - **单向关联**:实体间的关联关系只在一个实体中体现。 - **双向...
在处理多表关联时,Hibernate提供了一种高效且灵活的方法,尤其是当涉及到中间表的情况。中间表通常用于实现多对多(Many-to-Many)的关系,比如在一个用户和角色的关系中,一个用户可以有多个角色,一个角色也可以...
在多对多关系中,Hibernate会自动处理连接表的插入和删除操作。添加用户到角色或反之,只需简单地添加或移除对象即可。查询时,可以通过`Set`接口获取相关联的对象集合。 二、一对多映射(One-to-Many) 一对多...
4. **多对多关联**:两个实体之间存在多对多的关系,通常需要通过关联表来实现。 #### 结论 Hibernate通过提供强大的对象关系映射功能,极大地简化了Java应用与数据库的交互过程,使得开发人员能够更加专注于业务...
创建一个连接表来维护多对多的关联关系。 ##### 3. 外键双向关联 除了在一的一方定义关联外,还在多的一方增加反向导航。 ##### 4. 连接表双向关联 与连接表单向关联类似,但在双方都增加了反向导航。 #### 五...
在这个“hibernate双向多对多关联映射(注解版)”的主题中,我们将深入探讨如何使用Hibernate的注解配置来处理数据库中的双向多对多关联关系。 首先,多对多关联在数据库设计中是指两个实体之间存在多个对应关系,...
4. **多对多关联**:当两个实体之间存在多对多关系时,如学生和课程,通常需要一个中间表来存储连接。`@ManyToMany`注解和`@JoinTable`用来定义这种关系。 5. **继承映射**:Hibernate支持类的继承,如单一继承(`@...
类似于一对一的连接表关联,这里也是通过额外的连接表实现一对多关系。连接表会包含两个外键,一个指向父实体,另一个指向子实体。映射配置中,需要创建连接表实体,并使用 `many-to-one` 元素表示关联。 6. ...
在Hibernate中,实现多对多关系通常涉及到中间表或关联表,这个表用来存储两个实体类之间的关联。在这个"Hibernate Cascade"示例中,我们可能会看到如何配置这种关系,并且通过级联操作来管理这些关联对象的生命周期...
- `@JoinTable`用于多对多关联,定义连接表及其列。 二、项目实践 该项目可能包含以下关键文件: - `pom.xml`:Maven项目配置文件,包含了Hibernate和MySQL驱动等依赖。 - `hibernate.cfg.xml`:Hibernate的配置...
在实际的项目开发中,我们经常遇到各种各样的关联关系,比如一对一、一对多、多对一、多对多等。本文将详细讲解“Hibernate Annotation 中的共享主键一对一双向关联”。 首先,我们需要理解什么是共享主键(Shared ...
总结起来,Hibernate中的一对多/多对一关联是通过主外键映射来实现的,通过注解和配置文件定义实体间的关联关系,利用懒加载或立即加载策略控制数据获取,同时要注意双向关联的维护和级联操作的设置,以确保数据的...
在Hibernate中,多对多关系通过中间表(也称为联接表或关联表)来实现,这个表包含来自两个表的外键。 三、配置多对多映射 在Hibernate中,配置多对多映射通常需要以下几个步骤: 1. **实体类定义**:为每个实体...
本篇文章将深入探讨Hibernate中的三种主要关联关系:一对一、一对多和多对多。 **一对一关联(One-to-One)** 一对一关联在现实生活中很常见,例如一个人只有一个身份证。在Hibernate中,这种关联可以通过`@...