- 浏览: 72455 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
lijingshou:
感觉有学习价值..mark first
java仿QQ源代码 -
wang514674793:
写的很好,谢谢了~~~
Ztree的异步加载子节点简单使用
实体之间的一对多关系是很常见的一种关联关系,例如:一个人有多套房子,那就有多个地址,一个人在淘宝分不同时段买了多个东西,那就有多个订单;对于在数据库来说,那就是外键的约束关系,多的一方有个字段是外键,指向一的一方。在hibernate中,一对多关联关系映射分为2种,需分情况使用。一种是单向关联关系映射,一种是双向关系映射,下面以2张表说明,表中外键约束通过hibernate维护。下面是表间关系
其去掉foreign key 的SQL为:
CREATE TABLE `ADDRESS` (
`ID` int(4) NOT NULL auto_increment,
`CITY` varchar(40) default NULL,
`STREET` varchar(100) default NULL,
`PERSON_ID` int(4) NOT NULL default '0',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
CREATE TABLE `PERSON` (
`ID` int(4) NOT NULL auto_increment,
`NAME` char(20) default NULL,
`PHONE` char(20) default NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
一对多单向关联关系和一对多双向关联关系数据库表相同,不同的只是映射的JAVA类及映射文件的配置。DAO代码和测试代码省略。
一对多单向关联关系:
实体类:
映射文件:
Address.hbm.xml
Person.hbm.xml
一对多单向关联关系,可以从多的一方查询到一的一方,但从一的一方查询不到多的一方。
一对多双向关联关系映射:
实体类:
映射文件:
Address.hbm.xml
Person.hbm.xml
一对多双向关联关系,双方均可查询到对方。
从上面可以看出,一对多的单向和双向,只不过是在类中是否有对方作为属性,一的一方有个多的一方的set集合,多的一方有个一的一方做为属性。在配置文件中,单双向多的一方的配置均相同,只有一的一方不同。
其去掉foreign key 的SQL为:
CREATE TABLE `ADDRESS` (
`ID` int(4) NOT NULL auto_increment,
`CITY` varchar(40) default NULL,
`STREET` varchar(100) default NULL,
`PERSON_ID` int(4) NOT NULL default '0',
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
CREATE TABLE `PERSON` (
`ID` int(4) NOT NULL auto_increment,
`NAME` char(20) default NULL,
`PHONE` char(20) default NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=gb2312;
一对多单向关联关系和一对多双向关联关系数据库表相同,不同的只是映射的JAVA类及映射文件的配置。DAO代码和测试代码省略。
一对多单向关联关系:
实体类:
package com.onetomanysingle.model; /** * Address entity */ public class Address implements java.io.Serializable { // Fields private Integer id; private String city; private String street; private Person person; // Constructors /** default constructor */ public Address() { } /** minimal constructor */ public Address(Person person) { this.person = person; } /** full constructor */ public Address(String city, String street, Person person) { this.city = city; this.street = street; this.person = person; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getCity() { return this.city; } public void setCity(String city) { this.city = city; } public String getStreet() { return this.street; } public void setStreet(String street) { this.street = street; } public Person getPerson() { return this.person; } public void setPerson(Person person) { this.person = person; } }
package com.onetomanysingle.model; /** * Person entity */ public class Person implements java.io.Serializable { // Fields private Integer id; private String name; private String phone; // Constructors /** default constructor */ public Person() { } /** full constructor */ public Person(String name, String phone) { this.name = name; this.phone = phone; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getPhone() { return this.phone; } public void setPhone(String phone) { this.phone = phone; } }
映射文件:
Address.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.onetomanysingle.model.Address" table="address" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="city" type="java.lang.String"> <column name="CITY" length="40" /> </property> <property name="street" type="java.lang.String"> <column name="STREET" length="100" /> </property> <!-- 映射person到address的一对多单向关联即address到person的多对一单向关联 具体意义是:通过查询地址可以查询到此地址所住的人(一个)。 --> <many-to-one name="person" column="PERSON_ID" class="com.onetomanysingle.model.Person" lazy="false" not-null="true"/> <!-- 以上分别说明映射字段在类中的属性,表中的字段,对应的类,立即加载,非空 --> </class> </hibernate-mapping>
Person.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.onetomanysingle.model.Person" table="person" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="20" /> </property> <property name="phone" type="java.lang.String"> <column name="PHONE" length="20" /> </property> </class> </hibernate-mapping>
一对多单向关联关系,可以从多的一方查询到一的一方,但从一的一方查询不到多的一方。
一对多双向关联关系映射:
实体类:
package com.onetomanydouble.model; /** * Address entity */ public class Address implements java.io.Serializable { // Fields private Integer id; private String city; private String street; private Person person; // Constructors public Address() { super(); } public Address(Integer id, String city, String street, Person person) { super(); this.id = id; this.city = city; this.street = street; this.person = person; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getCity() { return this.city; } public void setCity(String city) { this.city = city; } public String getStreet() { return this.street; } public void setStreet(String street) { this.street = street; } public Person getPerson() { return person; } public void setPerson(Person person) { this.person = person; } }
package com.onetomanydouble.model; import java.util.HashSet; import java.util.Set; /** * Person entity */ public class Person implements java.io.Serializable { // Fields private Integer id; private String name; private String phone; private Set address = new HashSet(); // Constructors /** default constructor */ public Person() { } public Person(Integer id, String name, String phone, Set address) { super(); this.id = id; this.name = name; this.phone = phone; this.address = address; } // Property accessors public Integer getId() { return this.id; } public void setId(Integer id) { this.id = id; } public String getName() { return this.name; } public void setName(String name) { this.name = name; } public String getPhone() { return this.phone; } public void setPhone(String phone) { this.phone = phone; } public Set getAddress() { return address; } public void setAddress(Set address) { this.address = address; } }
映射文件:
Address.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.onetomanydouble.model.Address" table="address" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="city" type="java.lang.String"> <column name="CITY" length="40" /> </property> <property name="street" type="java.lang.String"> <column name="STREET" length="100" /> </property> <!-- 多对一映射 --> <many-to-one name="person" column="PERSON_ID" class="com.onetomanydouble.model.Person" lazy="false" not-null="true"/> </class> </hibernate-mapping>
Person.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.onetomanydouble.model.Person" table="person" catalog="test"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="native" /> </id> <property name="name" type="java.lang.String"> <column name="NAME" length="20" /> </property> <property name="phone" type="java.lang.String"> <column name="PHONE" length="20" /> </property> <!-- 一对多映射 inverse说明这是主控方,true由被控方(多的一方)维护外键关系,一般来说,都应该由多的一方来维护 --> <set name="address" cascade="all" inverse="true" lazy="false"> <key column="person_id"/> <one-to-many class="com.onetomanydouble.model.Address"/> </set> </class> </hibernate-mapping>
一对多双向关联关系,双方均可查询到对方。
从上面可以看出,一对多的单向和双向,只不过是在类中是否有对方作为属性,一的一方有个多的一方的set集合,多的一方有个一的一方做为属性。在配置文件中,单双向多的一方的配置均相同,只有一的一方不同。
发表评论
-
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入门四:多对多关联关系映射
2013-10-16 02:21 848hibernate中多对多关联关系映射和一对多关联关系映射 ... -
[转]hibernate中的inverse和cascade
2013-09-28 15:33 712nverse和cascade是Hibernate映 ... -
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开发人员用于处理数据库操作的强大工具,通过它,我们可以...
本人在厦门邦初培训时候用的ppt 快速入门文档 内容: 建立一对多的关联关系域模型 建立一对多的参照关系的模型 映射一对多关联关系 通过hibernateAPI级联操作关联对象 其它关系的映射:一对一,多对多
3. 一对多(One-to-Many)关联映射: - 单向一对多:一个实体(如`Class`)可以关联多个实体(如`Student`),`Student`的`classId`字段指向`Class`的主键。在Hibernate中,`<set>`或`<list>`标签用于表示集合,而`...
使用`@Entity`标记类为实体,`@Table`指定对应的数据库表,`@OneToMany`和`@ManyToOne`用于声明一对多关联。 6. **集合映射**:在一方实体中,使用`@OneToMany`注解并指定关联的实体类和映射字段。在另一方实体中,...
在这个“hibernate入门--第一个实例”中,我们将了解如何设置Hibernate环境,创建实体类,配置映射文件,以及执行基本的CRUD(创建、读取、更新和删除)操作。 1. **环境搭建** - **下载与安装**: 首先,你需要从...
案例目录: 01 01Hibernate_Handwork : 手工配置使用Hibernate,其中详细标了Hibernate进行持久化的一些过程,因为是Hibernate的入门实例,所以注释很详细,其中有... 一对一、多对一、一对多、多对多等几种情况。
13. **一对多、多对一、一对一关系映射**:理解如何在实体类间建立这些关联关系,并在映射文件或注解中进行配置。 14. **集合映射**:例如List、Set、Map等集合类型的字段与数据库表的关联映射。 15. **懒加载和...
传智播客李勇hibernate源码1-20课,目录如下:01_hibernate介绍... 17_一对多关联关系的映射与原理分析 18_一对一主键关联关系的映射与原理分析 19_一对一主键关联关系的检索 20_一对一外键关联关系的映射与原理分析
【hibernate之一对多配置demo】:在Java开发中,Hibernate是一个强大的对象关系映射(ORM)框架,它简化了数据库与Java对象之间的交互。本教程主要关注Hibernate中的一对多关系配置,并通过XML来实现,同时也涵盖了...
15. **实体关系映射策略**:包括一对一(OneToOne)、一对多(OneToMany)、多对一(ManyToOne)、多对多(ManyToMany)等,理解这些关系并正确配置是使用Hibernate的关键。 通过这个"hibernate_first"实例,你可以...
2. **一对多(OneToMany)**:一个实体可以有多个相关联的实体实例。 3. **多对一(ManyToOne)**:多个实体对应一个实体实例。 4. **多对多(ManyToMany)**:多个实体可以关联多个其他实体。 ## 十、总结 通过本...
6. **映射一对多关联关系** - 使用`@OneToMany`或`@ManyToMany`注解建立对象之间的多对一或一对多关系。 - 可以配置关联的映射字段、级联操作和缓存策略。 7. **操纵持久化对象** - Hibernate提供了CRUD(创建、...
- **Set、List、Map映射**: 处理一对多、多对多关系,支持排序等功能。 - **对象状态与识别**: - 理解Hibernate中的对象生命周期(瞬态、持久化、游离状态)。 - 对象的标识符管理和相等性的判断。 - **实体...
Hibernate支持一对一、一对多、多对一、多对多等各种关系映射,通过注解或XML配置文件定义。例如,一个用户可以有多个订单,订单也可以属于一个用户: ```java @Entity @Table(name = "Order") public class Order ...
Hibernate 是一个开源的对象关系映射(ORM)框架,它允许Java开发者在Java应用程序中操作数据库,而无需直接编写SQL语句。ORM框架如Hibernate简化了数据持久化的过程,通过将对象模型与数据库模型进行映射,实现了...
- 多种映射策略:支持一对一、一对多、多对多等多种关联关系。 - 对象的持久化管理:可以实现单个对象映射到多个表。 - 支持集合类型的映射。 - 多态关联:能够处理继承关系中的关联问题。 - SQL查询的自定义:允许...
1. **关联映射**:了解一对一、一对多、多对多的关联关系,并学会配置映射。 2. **事务管理**:理解Hibernate的事务处理机制,使用`session.getTransaction()`进行事务控制。 3. **CGLIB和ASM代理**:在无接口的情况...
7. **一对多、多对一、一对一和多对多关系映射**:深入解析不同类型的关联关系,包括如何在映射文件或注解中配置,以及如何在代码中操作这些关联对象。 8. **缓存机制**:探讨Hibernate的缓存策略,包括一级缓存和...
1. 关联映射:学习一对一、一对多、多对一、多对多等各种关联关系的配置与使用。 2. 收集类型:了解集合映射,如List、Set、Map等在Hibernate中的实现。 3. 链接查询:掌握HQL(Hibernate Query Language)和...