Person类代码如下:
具体参见各类映射关系
Address类代码如下:
public class Address implements Serializable { private Integer id; private String country; private String province; private String city; //省略setter和getter方法 }
1、单向N-1关联
Person类代码如下:
public class Person { private Integer id; private String name; private Address address; //省略setter和getter方法 }
1)、基于外键的单向N-1关联
系统会在N的一端即Person端映射的数据表中添加一个外键列,用来参照Address表的主键列。
多个Person对应一个Address,即一个Address对应多个Person,因此无法通过在Address表中添加一个外键列来表示关联关系;
但是一个Person只能对应一个Address,因此可以在Person表中添加一个外键列来表示关联关系。
因为可以有多个Person对应一个Address,所以Person表的外键字段可以出现重复的值。
Person.hbm.xml文件内容如下:
<class name="org.lgy.hibernate.pojos.Person" table="person"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="identity" /> </id> <property name="name" type="string" column="name"/> <many-to-one name="address" class="org.lgy.hibernate.pojos.Address" column="address_id" cascade="all"/> </class>
2)、基于连接表的单向N-1关联
这种关联会把关联关系保存在一张单独的表中。表中有2个外键列,一个外键列用于参照person表的主键,另一个用于参照address表的主键列。
<class name="org.lgy.hibernate.pojos.Person" table="person"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="identity" /> </id> <property name="name" type="string" column="name"/> <join table="person_address"> <!-- 映射参照本表(person表)主键的外键列,同时作为person_address表的主键 --> <key column="person_id"/> <!-- 映射参照address表主键的外键列 --> <many-to-one name="address" class="org.lgy.hibernate.pojos.Address" column="address_id" cascade="all"/> </join> </class>
2、单向1-1关联
1)、基于外键的单向1-1关联
只需为基于外键的单向N-1关联的<many-to-one/>元素增加unique=true属性即可,即为address_id字段添加唯一性约束。
<class name="org.lgy.hibernate.pojos.Person" table="person"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="identity" /> </id> <property name="name" type="string" column="name"/> <many-to-one name="address" class="org.lgy.hibernate.pojos.Address" column="address_id" cascade="all" unique="true"/> </class>
2)、基于连接表的单向1-1关联
只需为基于连接表的单向N-1关联的<many-to-one/>元素增加unique=true属性即可,即为address_id字段添加唯一性约束。
<class name="org.lgy.hibernate.pojos.Person" table="person"> <id name="id" type="java.lang.Integer"> <column name="ID" /> <generator class="identity" /> </id> <property name="name" type="string" column="name"/> <join table="person_address"> <key column="person_id"/> <many-to-one name="address" class="org.lgy.hibernate.pojos.Address" column="address_id" cascade="all" unique="true"/> </join> </class>
3)、基于主键的单向1-1关联
在Person类中配置基于主键的单向1-1关联时,Person类不能拥有自己的主键生成策略,它的主键由Address类的主键决定。
<class name="org.lgy.hibernate.pojos.Person" table="person"> <id name="id" type="int" column="id"> <generator class="foreign"> <param name="property">address</param> </generator> </id> <property name="name" type="string" column="name"/> <one-to-one name="address" class="org.lgy.hibernate.pojos.Address" cascade="all"/> </class>
3、单向1-N关联
public class Person { private Integer id; private String name; private Set<Address> addresses; //省略setter和getter方法 }
1)、基于外键的单向1-N关联
系统会在N的一端即Address端映射的数据表中增加一个外键列,来参照person表的主键。
<class name="org.lgy.hibernate.pojos.Person" table="person"> <id name="id" type="int" column="id"> <generator class="identity"/> </id> <property name="name" type="string" column="name"/> <set name="addresses" cascade="all"> <key column="person_id"/> <one-to-many class="org.lgy.hibernate.pojos.Address"/> </set> </class>
2)、基于连接表的1-N关联
在连接表中又2个字段,一个是person_id,参照person表的主键列;一个是address_id,参照address表的主键列。
一个Person对应多个Address,但是一个Address只能对应一个Person,所以连接表的person_id字段可以有重复值,而address_id字段的值是唯一的。
<class name="org.lgy.hibernate.pojos.Person" table="person"> <id name="id" type="int" column="id"> <generator class="identity"/> </id> <property name="name" type="string" column="name"/> <set name="addresses" table="person_address" cascade="all"> <key column="person_id"/> <many-to-many column="address_id" class="org.lgy.hibernate.pojos.Address" unique="true"/> </set> </class>
4、单向N-N关联
单向N-N关联只能使用连接表。
只需把基于连接表的单向1-N关联的<many-to-many/>元素的unique="true"属性删除即可。
<class name="org.lgy.hibernate.pojos.Person" table="person"> <id name="id" type="int" column="id"> <generator class="identity"/> </id> <property name="name" type="string" column="name"/> <set name="addresses" table="person_address" cascade="all"> <key column="person_id"/> <many-to-many column="address_id" class="org.lgy.hibernate.pojos.Address"/> </set> </class>
相关推荐
在Java的持久化框架Hibernate中,多对一(ManyToOne)关联关系是一种常见的对象关系映射(ORM)场景。这种关系通常出现在一个实体类拥有多条与另一个实体类相关的记录,而另一个实体类可能只有一条对应的记录。例如...
总结,Hibernate的一对多单向关联映射通过XML映射文件和注解配合,可以方便地管理实体之间的关系。这种方式简化了数据库操作,提高了代码的可读性和可维护性。在实际开发中,应根据业务需求灵活运用,确保数据的一致...
包含《多对多双向关联映射》《多对一单向关联映射》《多对一双向关联映射》《一对多单向关联映射》等文档,并有图解及例子,非常适合新手学习,尤其是刚刚接触hibernate,对映射关系不清楚的。。。。
在Java的持久化框架Hibernate中,一对一(One-to-One)关联映射是常见的关系映射方式之一,尤其在处理两个实体之间存在唯一对应关系时非常有用。本篇将重点讲解如何实现一对一主键关联映射的单向关联,并通过一个...
这篇博客文章“hibernate一对多关联映射(单向关联)”将深入讲解如何配置和使用这种映射关系。 在单向关联中,只有一个实体知道另一个实体的存在,也就是说,只有父实体("一"的一端)有对子实体("多"的一端)的...
在Java的持久化框架Hibernate中,一对一(One-to-One)关联关系是常见的一种实体关系映射。本主题将深入探讨如何使用Hibernate通过主键来实现一对一的单向关联关系,并提供相关的源码分析。 首先,我们需要理解一对...
**标题详解:**“Hibernate教程04_关系映射之一对一单向外键关联” 在Hibernate框架中,关系映射是数据库表之间的关联在对象模型中的体现。本教程重点讲解了一对一(One-to-One)单向外键关联的实现方法。在数据库...
接下来,我们需要在Hibernate的XML映射文件中定义这两个实体的关联关系。在`Person.hbm.xml`文件中: ```xml <!-- Person.hbm.xml --> <hibernate-mapping> <!-- 一对一关联配置 --> <!-- 其他属性映射...
本教程主要聚焦于Hibernate中的一个关键概念——关系映射,特别是多对一单向关联的实现。这种关联类型常出现在数据库设计中,比如一个部门可以有多名员工,但一个员工只属于一个部门。 首先,我们要理解多对一关系...
综上所述,Hibernate提供了丰富的关联关系映射机制,包括一对一、一对多和多对多关联,每种关联又可以细分为单向和双向,以及基于主键和基于外键的不同实现方式。正确理解和选择合适的关联关系对于构建高效、可维护...
本话题主要探讨的是Hibernate中的一种关联映射方式——一对一(One-to-One)单向外键关联。这种关联模式通常用于两个实体之间存在唯一对应的关系,例如一个用户对应一个唯一的账户。 在Hibernate中,一对一关联可以...
在Java的持久化框架Hibernate中,单向一对多关联映射是常见的数据关系处理方式,尤其是在处理数据库中的实体类和表之间的关系时。本主题主要关注如何使用注解来实现这种映射。Hibernate通过注解使得对象关系映射...
本教程主要探讨的是Hibernate中的一种重要关系映射类型:一对多单向关联。在关系型数据库中,一对多关联是最常见的关系类型,一个实体可以与多个其他实体相关联。在Hibernate中,这种关系可以通过配置XML映射文件或...
其中,实体关联关系映射是Hibernate的核心特性之一,对于实现复杂的业务逻辑至关重要。 本文旨在深入探讨Hibernate中的实体关联关系映射技术,主要包括一对一、一对多、多对多等不同类型的关联关系及其在实际开发中...
本练习主要关注的是Hibernate中的单向多对多关联映射,这是一种常见的关系数据库设计模式,用于表示两个实体间复杂的关系。 在多对多关联中,两个实体类可以相互拥有多个实例,但只在一个方向上建立关联。例如,...