日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate4一对一关系映射(共享主键方式)

發布時間:2025/6/15 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Hibernate4一对一关系映射(共享主键方式) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

示例:一個人(person) 住一個地址(address),一個地址有一個人。

?

Java代碼 ?
  • public?class?Person?{??
  • ??
  • ????private?Integer?id;??
  • ????private?String?name;??
  • ??
  • ????private?Address?address;??
  • ??
  • ????//getter?and?setter??
  • }?????
  • ?

    Java代碼 ?
  • public?class?Address?{??
  • ??
  • ????private?Integer?id;??
  • ????private?String?detail;??
  • ??
  • ????private?Person?person;??
  • ??
  • ????//getter?and?setter??
  • }??
  • ?

    用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;??
  • ??
  • ????//?getter?and?setter??
  • }??
  • ?

    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;??
  • ??
  • ????//?getter?and?setter??
  • }?????
  • ?

    @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一对一关系映射(共享主键方式)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。