生活随笔
收集整理的這篇文章主要介紹了
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"?/>??????????<one-to-one?name="address"?class="Address"?/>??????</class>??</hibernate-mapping>??
?
Xml代碼 ?
<hibernate-mapping?package="org.monday.hibernate4.domain">??????<class?name="Address"?table="tbl_address">??????????<id?name="id">??????????????<generator?class="foreign">??????????????????<param?name="property">person</param>??????????????</generator>??????????</id>??????????<property?name="detail"?/>??????????<one-to-one?name="person"?class="Person"?constrained="true"?/>??????</class>??</hibernate-mapping>??
1、Address的主鍵生成策略使用foreign方式,表示通過外鍵與Person對象共享標識符屬性。
2、<one-to-one>標簽的constrained屬性設置為true,表示約束Address對象的標識符屬性值必須與
person屬性所對應的持久化對象的標識符屬性相同。
?
用@Annotation映射
?
Java代碼 ?
@Entity??@Table(name?=?"tbl_person")??public?class?Person?{????????@Id??????@GeneratedValue(strategy?=?GenerationType.IDENTITY)??????private?Integer?id;??????private?String?name;????????@OneToOne??????@PrimaryKeyJoinColumn??????private?Address?address;??????????}??
?
Java代碼 ?
@Entity??@Table(name?=?"tbl_address")??public?class?Address?{????????@Id??????@GeneratedValue(generator?=?"myForeignGenerator")??????@GenericGenerator(name?=?"myForeignGenerator",???????????????strategy?=?"foreign",???????????????parameters?=?@Parameter(name?=?"property",?value?=?"person"))??????private?Integer?id;??????private?String?detail;????????@OneToOne(optional?=?false)??????@PrimaryKeyJoinColumn??????private?Person?person;??????????}?????
?
@OneToOne的optional=false表示在address這端添加一個外鍵約束
@PrimaryKeyJoinColumn定義了一對一關聯
?
測試代碼
?
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:???????create?table?tbl_address?(??????????id?integer?not?null,??????????detail?varchar(255),??????????primary?key?(id)??????)??Hibernate:???????create?table?tbl_person?(??????????id?integer?not?null?auto_increment,??????????name?varchar(255),??????????primary?key?(id)??????)??Hibernate:???????alter?table?tbl_address???????????add?index?FKD0C46473E8935A42?(id),???????????add?constraint?FKD0C46473E8935A42???????????foreign?key?(id)???????????references?tbl_person?(id)??Hibernate:???????insert???????into??????????tbl_person??????????(name)???????values??????????(?)??Hibernate:???????insert???????into??????????tbl_address??????????(detail,?id)???????values??????????(?,??)?
總結
以上是生活随笔為你收集整理的Hibernate4一对一关系映射(共享主键方式)的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。