Hibernate 註冊和聯表查詢

實體關係映射

一對一關聯:1、主鍵關聯    從表的主鍵同時是主表的外鍵,從表沒有單獨外鍵

2、外鍵關聯  從表中存在外鍵列,關聯主表的外鍵列。但外鍵列是不重複的。

級聯操作(all,none,delete,save-update)當前對象執行某操作的情況下, 有關聯的對象也執行cascade設置的相同操作

 

cascadeinverse的區別

cascade表示級聯操作,當主表記錄做操作時,從表記錄做相應的操作,維護的是記錄。

inverse表示控制反轉,當該屬性設置爲true,表示由關聯對象維護外鍵關係,當前對象不做外鍵維護,維護的是外鍵。一般來說,inverse設置在一方,外鍵由從表維護。

一對一:

<!-- name爲屬性名,class爲該屬性的類型,cascade表示當對主表對象操作時,從表對象是否做級聯操作 -->

<one-to-one name="codeBean" class="com.joker.bean.CodeBean"cascade="all"></one-to-one>

<!-- constrained表示該主鍵存在外鍵約束,lazy=false表示取消延遲加載,查詢該對象時,關聯對象立即查詢 -->

<one-to-one name="manBean" class="com.joker.bean.ManBean"constrained="true" lazy="false"></one-to-one>


 

一對一的從表主鍵如何配置:<id name="id" column="id">

<!-- 主鍵生成策略,foreign鏢師該主鍵同時也是外鍵 -->

<generatorclass="foreign">

<!-- manBean爲屬性名,表示該主鍵ManBean對象的主鍵生成 -->

<paramname="property">manBean</param>

</generator>

</id>


<!-- 主表:配置一對多,指定集合存放元素的類型 -->

<setname="prodSet" inverse="true">

<keycolumn="factoryId"></key>

<one-to-many class="com.lovo.RoomBean" />

</set>

   <!--從表: 配置多對一,指定集合存放元素的類型 -->

<many-to-onename="user" class="com.lovo.bean.UserBean"

column="userId"lazy="false"></many-to-one>


多對多關係映射:

<!-- talbe爲中間表表名 -->

<setname="gradeSet" table="t_role_grade">

<!-- 當前對象對應中間表的外鍵列名 -->

<keycolumn="roleId"></key>

<many-to-manyclass="com.lovo.bean.GradeBean"

column="gradeId"/>

</set>


註解註冊:

一對一

@OneToOne(mappedBy="manBean",cascade=CascadeType.ALL)

mappedBy表示當前屬性映射的從表對象的關聯屬性名,cascade表示是否做級聯刪除

@JoinColumn(name="manId",unique=true)

name爲外鍵列名,unique表示唯一外鍵關聯

一對多

@OneToMany(targetEntity=RoomBean.class)

targetentity指定集合中存放元素類型

@JoinColumn(name="userId")

指定外鍵列名

多對一

@ManyToOne(fetch=FetchType.EAGER)

fetch=FetchType.EAGER表示立即加載,查詢從表記錄時立即查詢主表對象

@JoinColumn(name="userId")

指定外鍵列名

 

@ManyToMany(targetEntity=GradeBean.class)

 

@JoinTable(name="t_role_grade",joinColumns={@JoinColumn(name="roleId")},

inverseJoinColumns={@JoinColumn(name="gradeId")})

指定中間表的表名,當前對象對應中間表的外鍵列名,集合中存放元素對應中間愛表的外鍵列名




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章