生活随笔
收集整理的這篇文章主要介紹了
Hibernate4一对一关系映射(唯一外键方式)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
示例:一個(gè)人(person) 住一個(gè)地址(address),一個(gè)地址有一個(gè)人。
?
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 表中使用外鍵來(lái)完成一對(duì)一關(guān)聯(lián),限制多方最多只能有一條記錄參考到一方,
這是多對(duì)一的一個(gè)特列。所以設(shè)置 <many-to-one> 的 unique 的屬性為 true 。
2、 <one-to-one> 的 property-ref 屬性 指定引用關(guān)聯(lián)類(lèi)的屬性。
?
用@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;??????????????}?? ?測(cè)試代碼
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語(yǔ)句,是因?yàn)椴迦腠樞驔Q定的。
若這樣
Java代碼 ?
session.save(address);???session.save(person);?? ?就不會(huì)有update語(yǔ)句了。
總結(jié)
以上是生活随笔為你收集整理的Hibernate4一对一关系映射(唯一外键方式)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。