- public class Group {
- private String id;
- private String name;
- …...
- }
- public class User{
- private String id;
- privte String name;
- private Group group;
- public Group getGroup(){return group;}
- public void setGroup(Group group){
- this.group = group;
- }
- ……
- }
- <many-to-one
- name="propertyName"
- column="column_name"
- class="ClassName"
- cascade="all|none|save-update|delete"
- property-ref="propertyNameFromAssociatedClass"
- not-null="true|false"
- />
column:column用于指定持久化类对应的表的外键字段名。(可选)
class:关联的类的名字。 (可选)
cascade(级联):指明哪些操作会从父对象级联到关联的对象。 (可选)
property-ref:指定关联类的一个属性,这个属性将会和本外键相对应。 如果没有指定,会使用对方关联类的主键。 (可选)
not-null:使用DDL为外键字段生成一个非空约束。(可选)
基于主键关联的单向一对一:
- //Person类
- public class Person {
- private int id;
- …..
- }
- //映射文件
- <class name="Person">
- <id name=“ID">
- <generator class=“native">
- </generator>
- </id>
- ….
- </class>
- //IdCard类
- public class IdCard {
- private int id;
- private Person person;
- ……
- }
- //映射文件
- <class name="IdCard">
- <id name=“ID">
- <generator class=“foreign">
- <param name="property"> person </param>
- </generator>
- </id>
- <one-to-one name=“person" constrained="true"/>
- ….
- </class>
基于外键关联的单向一对一:
- //Person类
- public class Person {
- private int id;
- …..
- }
- //映射文件
- <class name="Person">
- <id name="id">
- <generator class=“native">
- </generator>
- </id>
- ….
- </class>
- //IdCard类
- public class IdCard {
- private int id;
- private Person person;
- ……
- }
- //映射文件
- <class name="IdCard">
- <id name="id">
- <generator class=“native"/>
- </id>
- <many-to-one name=“person" column=“person_id” unique="true"/>
- ….
- </class>
一对多关联映射 (one-to-many)
- public class Classes {
- private String id;
- private String name;
- private Set students;
- ….}
- public class Student {
- private String id;
- private String name;
- …..}
一对多关联映射文件:
- <hibernate-mapping>
- <class name="Classes">
- <id name="id">
- <generator class="uuid"/>
- </id>
- <property name="name"/>
- <set name=“students”> <!--定义一个集合-->
- <key column=“classesid” ></key> <!--指定多端的外键-->
- <one-to-many class=“Student” /> <!--指定多端对应的类-->
- </set>
- </class>
- </hibernate-mapping>
多对多关联映射 (many-to-many)
<many-to-many
column="column_name" (1)
class="ClassName" (2)
/>
(1) column(必需): 中间映射表中,关联目标表的关联字段
(2) class (必需): 类名,关联目标类
<key column="column_name"/> (1)
(1) column(必需):当前表的关联字段
- <class name="Student">
- <id name="id" column="userId"><generator class="native"/></id>
- <set name="trainClasses" lazy="true" cascade="save-update">
- <key column="studentId"/>
- <many-to-many class="TrainClass" column="trainClassId"/>
- </set>
- </class>
- <class name="TrainClass" table="TBL_TRAIN_CLASS">
- <id name="id" column="trainClassId"><generator class="native"/></id>
- </class>