一對一
注解配置方式
對主表外鍵對象的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>
-------------------------------------------
多對多雙向關聯
将上述配置結合便可