生活随笔
收集整理的這篇文章主要介紹了
Hibernate4一对一关系映射(唯一外键方式)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
示例:一個人(person) 住一個地址(address),一個地址有一個人。
?
Java代碼 ?
public?class?Person?{????????private?Integer?id;??????private?String?name;????????private?Address?address;??????????}????? ?
Java代碼 ?
public?class?Address?{????????private?Integer?id;??????private?String?detail;????????private?Person?person;??????????}?? ?用XML映射
Xml代碼 ?
<hibernate-mapping?package="org.monday.hibernate4.domain">??????<class?name="Person"?table="tbl_person">??????????<id?name="id">??????????????<generator?class="identity"?/>??????????</id>??????????<property?name="name"?/>??????????<many-to-one?name="address"?class="Address"?column="address_id"?unique="true"/>??????</class>??</hibernate-mapping>?? ?
Xml代碼 ?
<hibernate-mapping?package="org.monday.hibernate4.domain">??????<class?name="Address"?table="tbl_address">??????????<id?name="id">??????????????<generator?class="identity"/>??????????</id>??????????<property?name="detail"?/>??????????<one-to-one?name="person"?class="Person"?property-ref="address"?/>??????</class>??</hibernate-mapping>?? ?1、 tbl_address 表中使用外鍵來完成一對一關聯,限制多方最多只能有一條記錄參考到一方,
這是多對一的一個特列。所以設置 <many-to-one> 的 unique 的屬性為 true 。
2、 <one-to-one> 的 property-ref 屬性 指定引用關聯類的屬性。
?
用@Annotation映射
Java代碼 ?
@Entity??@Table(name?=?"tbl_person")??public?class?Person?{????????@Id??????@GeneratedValue(strategy?=?GenerationType.IDENTITY)??????private?Integer?id;??????private?String?name;????????@OneToOne??????@JoinColumn(name?=?"address_id",?unique?=?true)??????private?Address?address;??????????}????? ?
Java代碼 ?
@Entity??@Table(name?=?"tbl_address")??public?class?Address?{????????@Id??????@GeneratedValue(strategy?=?GenerationType.IDENTITY)??????private?Integer?id;??????private?String?detail;????????@OneToOne(mappedBy?=?"address")??????private?Person?person;??????????????}?? ?測試代碼
Java代碼 ?
Person?person?=?new?Person();??person.setName("monday");????Address?address?=?new?Address();??address.setDetail("shanghai");????person.setAddress(address);??address.setPerson(person);????session.save(person);??session.save(address);??? ? SQL schema
Sql代碼 ?
Hibernate:???????alter?table?tbl_person???????????drop???????????foreign?key?FKACCC46F65DCD05A8??Hibernate:???????drop?table?if?exists?tbl_address??Hibernate:???????drop?table?if?exists?tbl_person??Hibernate:???????create?table?tbl_address?(??????????id?integer?not?null?auto_increment,??????????detail?varchar(255),??????????primary?key?(id)??????)??Hibernate:???????create?table?tbl_person?(??????????id?integer?not?null?auto_increment,??????????name?varchar(255),??????????address_id?integer?unique,??????????primary?key?(id)??????)??Hibernate:???????alter?table?tbl_person???????????add?index?FKACCC46F65DCD05A8?(address_id),???????????add?constraint?FKACCC46F65DCD05A8???????????foreign?key?(address_id)???????????references?tbl_address?(id)??Hibernate:???????insert???????into??????????tbl_person??????????(name,?address_id)???????values??????????(?,??)??Hibernate:???????insert???????into??????????tbl_address??????????(detail)???????values??????????(?)??Hibernate:???????update??????????tbl_person???????set??????????name=?,??????????address_id=????????where??????????id=???????? ?
?
這里多了一條update語句,是因為插入順序決定的。
若這樣
Java代碼 ?
session.save(address);???session.save(person);?? ?就不會有update語句了。
總結
以上是生活随笔為你收集整理的Hibernate4一对一关系映射(唯一外键方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。