一对一
注解配置方式
对主表外键对象的get方法添加注解
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="字段名", unique=true)
JoinColumn.name 外键字段名
JoinColumn.unique 是否唯一
保存时,先保存子表,再保存主表
xml配置方式
<many-to-one name="子表类属性名" column="外键数据字段名" unique="true" />
---------------------------------------
一对一双向关联
注解配置方式
一方get方法必须添加
@OneToOne(mappedBy="另一个表关联自己的属性名")
将控制权交给另一方,不能双方都设置外键保存关联关系,否则都无法保存
xml配置方式
被控方添加
<one-to-one name="关联类属性名" property-ref="关联类关联自己的对象属性名" />
-----------------------------------------
一对一联合主键关联
注解配置方式
生成主键类,在类名前配置注解@Embeddable
主键类必须实现serializable接口,重写hashCode()和equals()方法
实体类在复合主键的get方法前添加注解@EmbeddedId
复合主键类需要添加到cfg.xml配置文件中
主控类外键关联写法
@JoinColumns({
@JoinColumn(name="对象属性名", referencedColumnName="数据库字段名"),
@JoinColumn(name="对象属性名", referencedColumnName="数据库字段名")
})
xml配置方式
被控类
<composite-id name="pk" class="包...复合主键类">
<key-property name="类属性名" column="数据库字段名" type="java数据类型(int,float,double,string...)" />
<key-property name="类属性名" column="数据库字段名" type="java数据类型" />
<generator class="assigned"></generator>
</composite-id>
主控类
<many-to-one name="子表类属性名">
<column name="属性名" unique="true" />
<column name="属性名" />
</many-to-one>
-----------------------------------------
一对一组件关联
注解配置方式
主表实体类在子表事体对象get方法前添加注解@Embeddable
子表实体类无需任何配置,生成的表为含有两表所有字段的主表
注解配置方式
<component name="子表属性名" class="包...子表类名">
<property name="属性名" column="数据库字段名" type="java数据类型"></property>
<property name="属性名" column="数据库字段名" type="java数据类型"></property>
</component>
-----------------------------------------
多对一单向外键
注解配置方式
@ManyToOne(cascade={CascadeType.All}, fetch=FetchType.EAGER)
@JoinColumn(name="外键字段名")
xml配置方式
<many-to-one name="类属性名" cloumn="数据字段名" />
-----------------------------------------
一对多单向关联
主表实体类用Set集合关联子表实体类
注解配置方式
@OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.LAZY)
@JoinColumn(name="属性名", column="字段名")
xml配置方式
<set name="子表set集合属性名">
<key column="外键字段名"></key>
<one-to-many class="包...子表类名" />
</set>
懒加载:主表查询SQL先查询读取出来,子表用到多少查询读取多少
-------------------------------------------
一对多,多对一双向关联
将上述配置结合便可
-------------------------------------------
多对多
注解配置方式
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="定义中间关联表表名",
joinColumn={@JoinColumn(name="主表主键属性名")},
inverseJoinColumn={@JoinColumn(name="子表主键属性名")}
)
xml配置方式
<set name="set属性名" table="中间关联表表名" cascade="all">
<key column="主表主键属性名"></key>
<many-to-many class="包...子表类名" column="子表主键字段名" />
</set>
-------------------------------------------
多对多双向关联
将上述配置结合便可
注解配置方式
对主表外键对象的get方法添加注解
@OneToOne(cascade=CascadeType.ALL)
@JoinColumn(name="字段名", unique=true)
JoinColumn.name 外键字段名
JoinColumn.unique 是否唯一
保存时,先保存子表,再保存主表
xml配置方式
<many-to-one name="子表类属性名" column="外键数据字段名" unique="true" />
---------------------------------------
一对一双向关联
注解配置方式
一方get方法必须添加
@OneToOne(mappedBy="另一个表关联自己的属性名")
将控制权交给另一方,不能双方都设置外键保存关联关系,否则都无法保存
xml配置方式
被控方添加
<one-to-one name="关联类属性名" property-ref="关联类关联自己的对象属性名" />
-----------------------------------------
一对一联合主键关联
注解配置方式
生成主键类,在类名前配置注解@Embeddable
主键类必须实现serializable接口,重写hashCode()和equals()方法
实体类在复合主键的get方法前添加注解@EmbeddedId
复合主键类需要添加到cfg.xml配置文件中
主控类外键关联写法
@JoinColumns({
@JoinColumn(name="对象属性名", referencedColumnName="数据库字段名"),
@JoinColumn(name="对象属性名", referencedColumnName="数据库字段名")
})
xml配置方式
被控类
<composite-id name="pk" class="包...复合主键类">
<key-property name="类属性名" column="数据库字段名" type="java数据类型(int,float,double,string...)" />
<key-property name="类属性名" column="数据库字段名" type="java数据类型" />
<generator class="assigned"></generator>
</composite-id>
主控类
<many-to-one name="子表类属性名">
<column name="属性名" unique="true" />
<column name="属性名" />
</many-to-one>
-----------------------------------------
一对一组件关联
注解配置方式
主表实体类在子表事体对象get方法前添加注解@Embeddable
子表实体类无需任何配置,生成的表为含有两表所有字段的主表
注解配置方式
<component name="子表属性名" class="包...子表类名">
<property name="属性名" column="数据库字段名" type="java数据类型"></property>
<property name="属性名" column="数据库字段名" type="java数据类型"></property>
</component>
-----------------------------------------
多对一单向外键
注解配置方式
@ManyToOne(cascade={CascadeType.All}, fetch=FetchType.EAGER)
@JoinColumn(name="外键字段名")
xml配置方式
<many-to-one name="类属性名" cloumn="数据字段名" />
-----------------------------------------
一对多单向关联
主表实体类用Set集合关联子表实体类
注解配置方式
@OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.LAZY)
@JoinColumn(name="属性名", column="字段名")
xml配置方式
<set name="子表set集合属性名">
<key column="外键字段名"></key>
<one-to-many class="包...子表类名" />
</set>
懒加载:主表查询SQL先查询读取出来,子表用到多少查询读取多少
-------------------------------------------
一对多,多对一双向关联
将上述配置结合便可
-------------------------------------------
多对多
注解配置方式
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="定义中间关联表表名",
joinColumn={@JoinColumn(name="主表主键属性名")},
inverseJoinColumn={@JoinColumn(name="子表主键属性名")}
)
xml配置方式
<set name="set属性名" table="中间关联表表名" cascade="all">
<key column="主表主键属性名"></key>
<many-to-many class="包...子表类名" column="子表主键字段名" />
</set>
-------------------------------------------
多对多双向关联
将上述配置结合便可