- 浏览: 263717 次
- 性别:
- 来自: 成都
文章分类
- 全部博客 (87)
- Java (6)
- Frameworks (1)
- JavaWeb (3)
- Spring (6)
- Hibernate (26)
- Maven (2)
- Plugin (1)
- Velocity (1)
- Freemarker (1)
- Spring security (18)
- Google (5)
- Guice (5)
- rmi (1)
- Annotation (1)
- Binding (1)
- commons-fileupload (3)
- fileupload (3)
- ehcache (1)
- ApplicationContext (1)
- Resource (1)
- Validator (1)
- PropertyEditor (1)
- one-to-many (5)
- cascade (2)
- MessageSource (1)
- Serialize (1)
- Serializable (1)
- delete (1)
- delete-orphan (1)
- fetch (1)
- one-to-one (1)
- join (4)
- DomainObject (1)
- CRUD (1)
- composite-element (1)
- Hibernate ORM (14)
- dynamic-insert (1)
- dynamic-update (1)
- Search (1)
- DDD (0)
- Job (0)
- element (1)
- Unique (1)
- Group (1)
- tomcat (1)
- https (1)
- mysql (1)
最新评论
-
xurunchengof:
[url][url][url][img][img][img][ ...
Spring Security 3多用户登录实现之三 验证过滤器 -
Wind_ZhongGang:
yo8237233 写道你这样的话如果上传文件超过了50000 ...
Spring集成Commons fileupload,文件上传 -
yo8237233:
你这样的话如果上传文件超过了50000000就会报异常
Spring集成Commons fileupload,文件上传 -
zhuzhiguosnail:
Wind_ZhongGang 写道lianglaiyang 写 ...
Spring Security 3多用户登录实现一 -
曾老师:
?????
Spring Security 3用户登录实现之十 用户切换
对于多对多的关联关系处理,前面我讲解了在数据库中建立第三张表用于维护两者的关联关系,现在我来讲解另一种比较常用且通用的处理方式,那就是将这个多对多的关联关系拆解成两个一对多的关联关系,意取从这个多对多的关联关系中提取出一个中间实体,用来表示两者的多对多关联关系,这个中间实体在数据库中存在相应的数据表映射。
一。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<Couple> couples; 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="couples" cascade="all"> <key column="husbandid"/> <one-to-many class="com.orm.model.Couple"/> </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<Couple> couples; public Wife(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.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="couples" cascade="all"> <key column="wifeid"/> <one-to-many class="com.orm.model.Couple"/> </bag> </class> </hibernate-mapping>
三。Couple
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 Couple extends DomainObject{ private Husband husband; private Wife wife; public Couple(Husband husband, Wife wife) { this.husband = husband; this.wife = wife; } }
<?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.Couple" table="couple"> <id name="id" column="id" type="java.lang.Integer"> <generator class="native"/> </id> <many-to-one name="husband" class="com.orm.model.Husband" column="husbandid"/> <many-to-one name="wife" class="com.orm.model.Wife" column="wifeid"/> </class> </hibernate-mapping>
四。测试代码
package com.orm; import com.orm.model.Couple; 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"); coupleService.saveOrUpdate(wife1); coupleService.saveOrUpdate(wife2); Husband husband1 = new Husband("husband1"); Husband husband2 = new Husband("husband2"); coupleService.saveOrUpdate(husband1); coupleService.saveOrUpdate(husband2); Couple couple1 = new Couple(husband1, wife1); Couple couple2 = new Couple(husband1, wife2); Couple couple3 = new Couple(husband2, wife1); Couple couple4 = new Couple(husband2, wife2); coupleService.saveOrUpdate(couple1); coupleService.saveOrUpdate(couple2); coupleService.saveOrUpdate(couple3); coupleService.saveOrUpdate(couple4); } }
测试结果截图
最后附上源码以供参考
评论
3 楼
Wind_ZhongGang
2011-10-27
lf6627926 写道
我把 coupleService.saveOrUpdate(wife1);
coupleService.saveOrUpdate(wife2);
coupleService.saveOrUpdate(husband1);
coupleService.saveOrUpdate(husband2);
这四行去掉,怎么会报错呢,还有就是怎样实现查询啊!
coupleService.saveOrUpdate(wife2);
coupleService.saveOrUpdate(husband1);
coupleService.saveOrUpdate(husband2);
这四行去掉,怎么会报错呢,还有就是怎样实现查询啊!
我的事务又没有包含测试方法,所以你必须显示调用CRUD方法。
至于你的第一个问题说与直接将对象插入数据库有什么不同?我不太明白你的意思是什么?因为我的主键生成策略为native,所以如果我直接去保存couple,会因为这时主键还没有生成而报错。
2 楼
lf6627926
2011-10-26
我把 coupleService.saveOrUpdate(wife1);
coupleService.saveOrUpdate(wife2);
coupleService.saveOrUpdate(husband1);
coupleService.saveOrUpdate(husband2);
这四行去掉,怎么会报错呢,还有就是怎样实现查询啊!
coupleService.saveOrUpdate(wife2);
coupleService.saveOrUpdate(husband1);
coupleService.saveOrUpdate(husband2);
这四行去掉,怎么会报错呢,还有就是怎样实现查询啊!
1 楼
lf6627926
2011-10-26
我想知道一下 ,这种与直接将对象插入数据库有什么不同呢?
发表评论
-
Hibernate关联关系疑问
2011-10-27 17:32 1006有这样两个持久化对象Person和Book,两 ... -
Hibernate ORM 对象关联关系映射初解
2011-10-21 09:42 927这几天花了点时间写了点关于Hibernate对象关联 ... -
Hibernate ORM - 继承关联关系之joined-subclass
2011-10-20 12:32 1004Hibernate继承关联关系映射处理之joined ... -
Hibernate ORM - 继承关联关系之union-subclass
2011-10-20 12:27 2143Hibernate继承关联关系映射之union-su ... -
Hibernate ORM - 继承关联关系之sub-class
2011-10-20 12:11 1094Hibernate对于继承的关联关系有三种处理方式, ... -
Hibernate ORM - 多对多双向连接表关联关系
2011-10-20 09:27 985对于多对多的关联关系处理,一种方式是使用连接表来维持两者的 ... -
Hibernate ORM - 一对多双向组合关联关系
2011-10-19 13:34 1036对于一对多的关联关系方式还有一种比较特殊的做法就是将 ... -
Hibernate ORM - 一对多双向连接表关联关系
2011-10-19 13:11 1734对于一对多的关联关系,除去上一单讲的在多方 ... -
Hibernate ORM - 一对多双向关联关系
2011-10-19 10:51 3533对于一对多的关联关系,通常的做法就是在多方映射的数据 ... -
Hibernate ORM - 一对一连接表关联关系
2011-10-19 10:29 1432对于一对一关联关系的建立,除了前面讲的方式,即将关联 ... -
Hibernate ORM - 一对一主键关联关系
2011-10-19 10:05 984对于一对一的关联关系,除了为其中一方的数据表增加外键 ... -
Hibernate ORM - 一对一外键关联关系
2011-10-18 18:00 1152对于持久化实体间一对一的关联关系来说,在代码层面来看 ... -
Hibernate ORM
2011-10-18 17:27 1048Hibernate ORM (Hibernate O ...
相关推荐
这个压缩包文件“HibernateORM”很可能包含了关于如何在实际项目中设置和使用Hibernate一对多双向关联的示例代码、配置文件或者详细教程。通过学习这些材料,开发者能够深入理解如何在Java应用中利用Hibernate来处理...
本文将深入探讨Hibernate ORM中的一个关键概念——多对多双向连接表关联关系。这种关联关系在实际业务场景中非常常见,比如用户与角色、课程与学生等例子,都需要用到多对多的关系来描述它们之间的复杂联系。 首先...
"HibernateORM"可能是包含有关Hibernate ORM框架的详细信息的文件夹或压缩包,里面可能包含示例代码、教程文档或其他资源,用于辅助学习和理解Hibernate ORM的一对多双向关联。 **知识点详解:** 1. **Hibernate ...
在关系型数据库中,一对多关联意味着一个父实体可以与多个子实体相对应,而双向则表示这种关系是相互的,即父实体可以找到其所有子实体,同时每个子实体也能追溯到其父实体。 **描述:** 由于描述为空,我们无法从...
综上所述,Hibernate ORM 的一对一主键关联关系是通过共享主键或外键约束来实现两个实体间的唯一对应。在实际应用中,开发者需要根据需求选择合适的关联方式,并注意关联带来的性能影响。通过理解并熟练掌握这些配置...
在本篇【myeclipse试用小记----Hibernate多对一双向关联(2)】中,博主主要探讨了使用MyEclipse集成开发环境与Hibernate框架进行多对一双向关联的配置与实现。MyEclipse是Eclipse的一个强大扩展,特别适合Java Web...
4. **多对一关联(Many-to-One Association)**:在子类(被多个父项关联的一方)中,使用`@ManyToOne`注解来定义关联,表示多个实体可以与一个其他实体相关联。 5. **双向关联(Bidirectional Association)**:在...
"多对多双向关联"是Hibernate中一种关系映射类型,涉及两个实体类之间的复杂关联。在数据库设计中,多对多关系意味着一个实体可以与多个其他实体相关联,反之亦然。例如,学生可以选修多门课程,课程也可以被多名...
本文主要关注Hibernate中的一个核心概念——一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关联映射,特别是关于“一到多”单向和双向关联映射的配置心得。 首先,让我们了解“一到多”关联...
在"hibernateORM1-n映射"这个主题中,我们将深入探讨Hibernate中的一对多(1:N)映射关系。 在关系数据库中,一对多关系是指一个表中的记录可以对应另一个表中的多个记录。在Hibernate中,这种关系可以通过配置XML...
实体关联关系映射涉及一对一、一对多、多对多等多种形式,而这些映射方式又可以分为单向和双向,依据使用的是主键还是外键,以及是否使用连接表。接下来,我们详细介绍这些知识点。 ###Hibernate实体关联关系映射...
在Hibernate框架中,双向一对多关联映射是常见的对象关系映射(ORM)方式,用于在Java对象模型中表示数据库中的两个实体之间的多对一关系。在这个场景中,"一"端通常指的是一个实体可以拥有多个另一个实体的实例,而...
而多对多关系是通过在两个参与实体之间创建一个额外的中间表来实现的,这个中间表通常包含两个外键,分别指向原表的主键。例如,User表和Role表通过UserRoles表进行关联,UserRoles表有User_id和Role_id字段。 在...
在数据库设计中,实体间的关系通常包括一对一(One-to-One)、一对多(One-to-Many)和多对一(Many-to-One)关系,而在Hibernate这个ORM(对象关系映射)框架中,这些关系可以被映射到Java对象上,使得数据操作更加...
本文将深入探讨Hibernate5中的映射关系,主要包括多对多(Many-to-Many)和一对多(One-to-Many)这两种关系。 一、多对多映射(Many-to-Many) 多对多关系在数据库中表现为两个表之间存在多个连接记录,而在对象...
综上所述,Hibernate提供了丰富的关联关系映射机制,包括一对一、一对多和多对多关联,每种关联又可以细分为单向和双向,以及基于主键和基于外键的不同实现方式。正确理解和选择合适的关联关系对于构建高效、可维护...
多对多关系通常需要一个中间表来存储两个实体的关联信息,但在Hibernate中,我们不需要手动创建这个中间表。`@JoinTable`注解可以用来定义中间表的详细信息,包括表名、连接字段等。 3. **关系的维护**: 在双向...