一、单项N - 1的关系映射(比如最常见的父子关系、比如多个人对应同一个住址)先看如下两个POJO: public class Person ... { private int personid; private String name; private int age; private Address address; ……省略setter&getter} 每个Person单向地对应一个Address,但无法从Address端来访问Person public class Address ... { //该地址的标识属性 private int addressid; //该地址的详细地址位置 private String addressdetail; ……} 对于Address端而言,不必关心Person持久化类。 1 .无连接表的N - 1 Person端增加了Address属性,该属性不是一个普通的引用属性,而是引用另一个持久化类,使用many - to - one元素即可映射N - 1的持久化属性。type:确定关联实体的类;column:确定外键列的列名。 <? xml version = " 1.0 " ?> <! DOCTYPE hibernate - mapping PUBLIC " -//Hibernate/Hibernate Mapping DTD 3.0//EN " " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " > < hibernate - mapping package = " prolove " > < class name = " Person " > < id name = " personid " > < generator class = " identity " /> </ id > < property name = " name " /> < property name = " age " /> <!-- 用来映射关联的PO column是Address在该表中的外键列名 --> < many - to - one name = " address " column = " addressid " /> </ class > < class name = " Address " > < id name = " addressid " > < generator class = " identity " /> </ id > < property name = " addressdetail " /> </ class > </ hibernate - mapping > 2 .有连接表的N - 1 <? xml version = " 1.0 " ?> <! DOCTYPE hibernate - mapping PUBLIC " -//Hibernate/Hibernate Mapping DTD 3.0//EN " " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " > < hibernate - mapping package = " prolove " > < class name = " Address " > < id name = " addressid " > < generator class = " identity " /> </ id > < property name = " addressdetail " /> </ class > < class name = " Person " > < id name = " personid " > < generator class = " identity " /> </ id > < property name = " name " /> < property name = " age " /> <!-- 用来映射关联的PO column是Address在该表中的外键列名 --> <!-- 使用join元素显式确定连接表 --> < join table = " join_table " > < key column = " personid " /> < many - to - one name = " address " /> </ join > </ class > </ hibernate - mapping > 二、单向1 - 1的关系映射 1 .基于外键的单向1 - 1 <? xml version = " 1.0 " ?> <! DOCTYPE hibernate - mapping PUBLIC " -//Hibernate/Hibernate Mapping DTD 3.0//EN " " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " > < hibernate - mapping package = " prolove " > < class name = " Person " > < id name = " personid " > < generator class = " identity " /> </ id > < property name = " name " /> < property name = " age " /> <!-- 增加unique = " true " --> < many - to - one name = " address " column = " addressid " unique = " true " /> </ class > < class name = " Address " > < id name = " addressid " > < generator class = " identity " /> </ id > < property name = " addressdetail " /> </ class > </ hibernate - mapping > 2 .有连接表的单向1 - 1 这种情况很少见,原理同上,增加unique = " true " ; <? xml version = " 1.0 " ?> <! DOCTYPE hibernate - mapping PUBLIC " -//Hibernate/Hibernate Mapping DTD 3.0//EN " " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " > < hibernate - mapping package = " prolove " > < class name = " Address " > < id name = " addressid " > < generator class = " identity " /> </ id > < property name = " addressdetail " /> </ class > < class name = " Person " > < id name = " personid " > < generator class = " identity " /> </ id > < property name = " name " /> < property name = " age " /> < join table = " join_table " > < key column = " personid " /> < many - to - one name = " address " unique = " true " /> </ join > </ class > </ hibernate - mapping > 3 .基于主键的单向1 - 1 <? xml version = " 1.0 " ?> <! DOCTYPE hibernate - mapping PUBLIC " -//Hibernate/Hibernate Mapping DTD 3.0//EN " " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " > < hibernate - mapping package = " prolove " > < class name = " Person " > < id name = " personid " > <!-- 基于主键关联时,主键生成策略是foreign,表明根据关联类生成主键 --> < generator class = " foreign " > <!-- 关联持久化类的属性名 --> < param name = " property " > address </ param > </ generator > </ id > < property name = " name " /> < property name = " age " /> <!-- 用于映射1 - 1关联 --> < one - to - one name = " address " constrained = " true " /> </ class > < class name = " Address " > < id name = " addressid " > < generator class = " identity " /> </ id > < property name = " addressdetail " /> </ class > </ hibernate - mapping > 三、单向1 - N的关系映射N的一端是Address端,在单向关联中无须访问关联类。源代码如下: public class Address implements Serializable ... { private int addressid; private String addressdetail; private Address() ...{} ……} 下面是Person端,需要增加集合属性,并且集合属性里每个元素都是持久化类。 public class Person implements Serializable ... { private int personid; private String name; private int age; //集合属性,用于关联持久化类 prvaite Set addresses = new HashSet(); ……} 1 .无连接表的单向1 - N <? xml version = " 1.0 " ?> <! DOCTYPE hibernate - mapping PUBLIC " -//Hibernate/Hibernate Mapping DTD 3.0//EN " " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " > < hibernate - mapping package = " prolove " > < class name = " Address " > < id name = " addressid " > < generator class = " identity " /> </ id > < property name = " addressdetail " /> </ class > < class name = " Person " > < id name = " personid " > < generator class = " identity " /> </ id > < property name = " name " /> < property name = " age " /> <!-- 映射集合属性,关联到持久化类 --> < set name = " addresss " > <!-- 确定关联的外键列 --> < list - index column = " displayorder " /> <!-- 用以映射到关联类属性 --> < one - to - many class = " Address " /> </ set > </ class > </ hibernate - mapping > 2 .有连接表的单向1 - N(类似于N - N) <? xml version = " 1.0 " ?> <! DOCTYPE hibernate - mapping PUBLIC " -//Hibernate/Hibernate Mapping DTD 3.0//EN " " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " > < hibernate - mapping package = " prolove " > < class name = " Address " > < id name = " addressid " > < generator class = " identity " /> </ id > < property name = " addressdetail " /> </ class > < class name = " Person " > < id name = " personid " > < generator class = " identity " /> </ id > < property name = " name " /> < property name = " age " /> <!-- 映射集合属性,关联到持久化类 --> < set name = " addresss " > <!-- 确定关联的外键列 --> < set - index column = " displayorder " /> <!-- 用以映射到关联类属性,这里作了修改 --> < many - to - many class = " Address " unique = " true " /> </ set > </ class > </ hibernate - mapping > 四、单向N - N的关系映射( 1 - N) <? xml version = " 1.0 " ?> <! DOCTYPE hibernate - mapping PUBLIC " -//Hibernate/Hibernate Mapping DTD 3.0//EN " " http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd " > < hibernate - mapping package = " prolove " > < class name = " Address " > < id name = " addressid " > < generator class = " identity " /> </ id > < property name = " addressdetail " /> </ class > < class name = " Person " > < id name = " personid " > < generator class = " identity " /> </ id > < property name = " name " /> < property name = " age " /> < set name = " addresss " > <!-- list - index --> < list - index column = " displayorder " /> <!-- 去除unique --> < many - to - many class = " Address " /> </ set > </ class > </ hibernate - mapping >