- 浏览: 72451 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lijingshou:
感觉有学习价值..mark first
java仿QQ源代码 -
wang514674793:
写的很好,谢谢了~~~
Ztree的异步加载子节点简单使用
hibernate中多对多关联关系映射和一对多关联关系映射一样,分为单双向。从基本形式上,可看作是一对多,多对一的结合,其实也就是2个一对多或者多对一。从数据库上来说,为了满足范式的规约,多对多经常采用中间表的方式经行关联。关于hibernate的多对多而言,我们一般无法操纵中间表,也就是一般来说,我们的中间表多采用2个字段,联合主键的形式。如果想要操作中间表,比如在业务需求中中间表必须带有其他字段,就需要对中间表经行实体映射,基本的解决思路是将多对多,拆解为2个一对多(one-to-many)——两个主表对中间表,以及中间表对主表的2个多对一(many-to-one)。以下例子是引用java web整合开发中的,是很好的例子,只是进行了必要的注释。
首先还是数据库关系图:
多对多单向关联关系
2个实体类:
映射文件:
Items.hbm.xml
Orders.hbm.xml
多对多双向关联关系
实体类:
映射文件:
Items.hbm.xml
Orders.hbm.xml
首先还是数据库关系图:
多对多单向关联关系
2个实体类:
package com.manytomanysingle.model; /** * Items entity */ public class Items implements java.io.Serializable { // Fields private Integer id; private String itemno; private String itemname; // Constructors /** default constructor */ public Items() { } /** full constructor */ public Items(String itemno, String itemname) { this.itemno = itemno; this.itemname = itemname; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getItemno() { return this.itemno; } public void setItemno(String itemno) { this.itemno = itemno; } public String getItemname() { return this.itemname; } public void setItemname(String itemname) { this.itemname = itemname; } }
package com.manytomanysingle.model; import java.util.HashSet; import java.util.Set; /** * Orders entity. */ public class Orders implements java.io.Serializable { // Fields private Integer id; private String orderno; private Double money; private Set items = new HashSet(); // Constructors public Orders() { super(); } public Orders(Integer id, String orderno, Double money, Set items) { super(); this.id = id; this.orderno = orderno; this.money = money; this.items = items; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getOrderno() { return this.orderno; } public void setOrderno(String orderno) { this.orderno = orderno; } public Double getMoney() { return this.money; } public void setMoney(Double money) { this.money = money; } public Set getItems() { return items; } public void setItems(Set items) { this.items = items; } }
映射文件:
Items.hbm.xml
<?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> <class name="com.manytomanysingle.model.Items" table="items" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="itemno" type="java.lang.String"> <column name="ITEMNO" length="20" /> </property> <property name="itemname" type="java.lang.String"> <column name="ITEMNAME" length="60" /> </property> </class> </hibernate-mapping>
Orders.hbm.xml
<?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> <class name="com.manytomanysingle.model.Orders" table="orders" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="orderno" type="java.lang.String"> <column name="ORDERNO" length="20" /> </property> <property name="money" type="java.lang.Double"> <column name="MONEY" precision="10" /> </property> <!-- 映射多对多关联单向关联,orders到items,查询orders将查询到items --> <set name="items" table="selecteditems" lazy="true" cascade="save-update"> <key column="orderid"/> <many-to-many class="com.orm.items" column="itemid"/> </set> </class> </hibernate-mapping>
多对多双向关联关系
实体类:
package com.manytomanydouble.model; import java.util.HashSet; import java.util.Set; /** * Items entity. */ public class Items implements java.io.Serializable { // Fields private Integer id; private String itemno; private String itemname; private Set orders = new HashSet(); // Constructors /** default constructor */ public Items() { } public Items(Integer id, String itemno, String itemname, Set orders) { super(); this.id = id; this.itemno = itemno; this.itemname = itemname; this.orders = orders; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getItemno() { return this.itemno; } public void setItemno(String itemno) { this.itemno = itemno; } public String getItemname() { return this.itemname; } public void setItemname(String itemname) { this.itemname = itemname; } public Set getOrders() { return orders; } public void setOrders(Set orders) { this.orders = orders; } }
package com.manytomanydouble.model; import java.util.HashSet; import java.util.Set; /** *Orders entity. */ public class Orders implements java.io.Serializable { // Fields private Integer id; private String orderno; private Double money; private Set items=new HashSet(); public Orders() { super(); } public Orders(Integer id, String orderno, Double money, Set items) { super(); this.id = id; this.orderno = orderno; this.money = money; this.items = items; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getOrderno() { return this.orderno; } public void setOrderno(String orderno) { this.orderno = orderno; } public Double getMoney() { return this.money; } public void setMoney(Double money) { this.money = money; } public Set getItems() { return items; } public void setItems(Set items) { this.items = items; } }
映射文件:
Items.hbm.xml
<?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> <class name="com.manytomanydouble.model.Items" table="items" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="itemno" type="java.lang.String"> <column name="ITEMNO" length="20" /> </property> <property name="itemname" type="java.lang.String"> <column name="ITEMNAME" length="60" /> </property> <!-- 映射多对多 ,这是被控方,orders为主控方,外键关系由orders维护--> <set name="orders" table="selecteditems" lazy="true" inverse="true" cascade="save-update"> <!-- 指明Iterms中主键在其他表中作为外键使用时的字段名 --> <key column="itemid"/> <!-- 指明集合对应的类,集合中全是此类的对象,以及指明了Items参照这个类使用的外键名 --> <many-to-many class="com.manytomanydouble.model.Orders" column="orderid"/> </set> </class> </hibernate-mapping>
Orders.hbm.xml
<?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> <class name="com.manytomanydouble.model.Orders" table="orders" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="orderno" type="java.lang.String"> <column name="ORDERNO" length="20" /> </property> <property name="money" type="java.lang.Double"> <column name="MONEY" precision="10" /> </property> <!-- 映射多对多 --> <set name="items" table="selecteditems" lazy="true" cascade="save-update"> <!-- 主键在其他表中作为外键的字段名 --> <key column="orderid"/> <!-- 集合中存放的对象对应的类,Orders的关于Iterms表的外键名称 --> <many-to-many class="com.manytomanydouble.model.Items" column="itemid"/> </set> </class> </hibernate-mapping>
发表评论
-
Hibernate泛型DAO接口,大部分通用都已包括
2014-01-24 13:47 7951过了大半年,来把这个更新下。 Hibernate通用泛型DAO ... -
Hibernate的load()、get()、list()、iterator()方法的区别,求证中
2014-01-24 10:08 1039一级缓存,内部缓存, ... -
[转]hibernate模糊查询
2014-01-23 09:59 893Hibernate中Criteria的完整用法2008年07 ... -
[转]hibernate中的inverse和cascade
2013-09-28 15:33 712nverse和cascade是Hibernate映 ... -
hibernate入门三:一对多关联关系映射
2013-09-28 15:08 2108实体之间的一对多关系是很常见的一种关联关系,例如:一个人有 ... -
hibernate入门二:一对一关联关系映射
2013-09-05 20:04 907在hibernate中一对一关联关系映射有两种方式:共享主 ... -
hibernate入门一:单表操作(单对象操作)
2013-09-03 14:27 778最近开始整理学习 ...
相关推荐
本教程将带你入门Hibernate的多对多实体映射,帮助你理解如何通过源码来实现这种复杂的关系映射。 一、Hibernate概述 Hibernate是一个对象关系映射(ORM)框架,它允许我们将Java对象(实体)与数据库表进行映射,...
在这个“hibernate学习入门之一对多实体映射源码”教程中,我们将深入探讨如何在Hibernate中设置和管理一对多的关系。 一、Hibernate简介 Hibernate是Java开发人员用于处理数据库操作的强大工具,通过它,我们可以...
本文将深入探讨 Hibernate 中的一对一映射关系,并以"hibernate 映射关系学习入门 一对一映射Eclipse源码"为主题,详细解析其概念、配置以及实际应用。 一对一映射是Hibernate中的一种关联关系,它表示两个实体之间...
【Hibernate入门案例源码】是针对初学者设计的一份教程,旨在帮助理解并掌握Java持久化框架Hibernate的基础应用。Hibernate是一个强大的ORM(对象关系映射)框架,它简化了数据库与Java对象之间的交互,使开发者可以...
1. 多对一(Many-to-One)关联映射: 在多对一的关系中,一个实体(如`Group`)可以对应多个实体(如`User`)。在数据库中,这通常表现为在`User`表中有一个`groupId`字段指向`Group`表的主键。在Hibernate映射文件...
本人在厦门邦初培训时候用的ppt 快速入门文档 内容: 建立一对多的关联关系域模型 建立一对多的参照关系的模型 映射一对多关联关系 通过hibernateAPI级联操作关联对象 其它关系的映射:一对一,多对多
**Hibernate入门** Hibernate是一款强大的Java持久化框架,它简化了数据库与Java对象之间的交互,使得开发者无需编写大量的SQL语句,就能实现数据的增删改查。本教程将分为五个部分,逐步深入Hibernate的世界。 **...
【hibernate入门小例子】是一个适合初学者的教程,主要涵盖了如何在JavaWeb项目中使用Hibernate框架与MySQL数据库进行集成。在这个例子中,我们将会深入理解Hibernate的核心概念,包括实体映射、对象关系映射(ORM)...
在这个“hibernate入门--第一个实例”中,我们将了解如何设置Hibernate环境,创建实体类,配置映射文件,以及执行基本的CRUD(创建、读取、更新和删除)操作。 1. **环境搭建** - **下载与安装**: 首先,你需要从...
案例目录: 01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了Hibernate进行持久化的一些过程,因为是Hibernate的入门实例,所以注释很详细,其中有... 一对一、多对一、一对多、多对多等几种情况。
13. **一对多、多对一、一对一关系映射**:理解如何在实体类间建立这些关联关系,并在映射文件或注解中进行配置。 14. **集合映射**:例如List、Set、Map等集合类型的字段与数据库表的关联映射。 15. **懒加载和...
1. 关联映射:学习一对一、一对多、多对一、多对多等各种关联关系的配置与使用。 2. 收集类型:了解集合映射,如List、Set、Map等在Hibernate中的实现。 3. 链接查询:掌握HQL(Hibernate Query Language)和...
4. **多对多(ManyToMany)**:多个实体可以关联多个其他实体。 ## 十、总结 通过本教程,你将掌握Hibernate的基本使用,包括环境配置、对象关系映射、CRUD操作、查询方式以及缓存管理。这只是一个开始,深入学习...
15. **实体关系映射策略**:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)等,理解这些关系并正确配置是使用Hibernate的关键。 通过这个"hibernate_first"实例,你可以...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者在Java应用程序中操作数据库,而无需直接编写SQL语句。ORM框架如Hibernate简化了数据持久化的过程,通过将对象模型与数据库模型进行映射,实现了...
- 多种映射策略:支持一对一、一对多、多对多等多种关联关系。 - 对象的持久化管理:可以实现单个对象映射到多个表。 - 支持集合类型的映射。 - 多态关联:能够处理继承关系中的关联问题。 - SQL查询的自定义:允许...
本实例将聚焦于Hibernate中的一对多关系,这是一种常见的关联类型,尤其是在处理具有层次结构的数据时。双向一对多关系意味着一个实体可以拥有多个相关联的实体,同时每个相关联的实体也可以回指到原始实体。 **...
1. **关联映射**:了解一对一、一对多、多对多的关联关系,并学会配置映射。 2. **事务管理**:理解Hibernate的事务处理机制,使用`session.getTransaction()`进行事务控制。 3. **CGLIB和ASM代理**:在无接口的情况...
- **关联关系**:关联关系是对象之间的一种联系,比如一个班级可以有多个学生,这种关系在ORM中可以通过一对一、一对多、多对一、多对多等方式实现。 - **依赖关系**:对象之间的短暂交互,如函数调用,不涉及长期...