天天看點

Hibernate ORM

一對一

注解配置方式

對主表外鍵對象的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>

-------------------------------------------

多對多雙向關聯

将上述配置結合便可