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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Hibernate4一对多关系映射(自身关联)

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

示例:一個類別(Category)下面有多個子類別,多個子類別屬于同一個父類別。

Java代碼 ?
  • public?class?Category??{??
  • ??
  • ????private?Integer?id;??
  • ????private?String?name;??
  • ????private?Category?parentCategory;?//?父類別??
  • ????private?Set<Category>?childCategories?=?new?HashSet<Category>();?//?子類別??
  • ??
  • ????//?getter?and?setter??
  • }??
  • ?用XML映射

    Xml代碼 ?
  • <hibernate-mapping?package="org.monday.hibernate4.domain">??
  • ????<class?name="Category"?table="tbl_category">??
  • ????????<id?name="id">??
  • ????????????<generator?class="identity"?/>??
  • ????????</id>??
  • ????????<property?name="name"?/>??
  • ????????<many-to-one?name="parentCategory"?class="Category"?column="category_id"?/>??
  • ????????<set?name="childCategories"?inverse="true"?cascade="all">??
  • ????????????<key?column="category_id"?/>??
  • ????????????<one-to-many?class="Category"?/>??
  • ????????</set>??
  • ????</class>??
  • </hibernate-mapping>??
  • ?用@Annotation映射

    ?

    Java代碼 ?
  • @Entity??
  • @Table(name?=?"tbl_category")??
  • public?class?Category??{??
  • ??
  • ????@Id??
  • ????@GeneratedValue(strategy?=?GenerationType.IDENTITY)??
  • ????private?Integer?id;??
  • ????private?String?name;??
  • ??
  • ????@ManyToOne??
  • ????@JoinColumn(name?=?"category_id")??
  • ????private?Category?parentCategory;?//?父類別??
  • ??
  • ????@OneToMany(mappedBy?=?"parentCategory",?targetEntity?=?Category.class,?cascade?=?CascadeType.ALL)??
  • ????private?Set<Category>?childCategories?=?new?HashSet<Category>();?//?子類別??
  • ??
  • ????//getter?and?setter??
  • }??
  • ?

    測試代碼

    Java代碼 ?
  • ?????????????????????Category?foodCategory?=?new?Category("food");??
  • Category?fruitCategory?=?new?Category("fruit");??
  • Category?vegetableCategory?=?new?Category("vegetable");??
  • Category?appleCategory?=?new?Category("apple");??
  • Category?orangeCategory?=?new?Category("orange");??
  • Category?tomatoCategory?=?new?Category("tomato");??
  • ??
  • //?建立食品類別和水果類別之間的關(guān)聯(lián)關(guān)系??
  • foodCategory.getChildCategories().add(fruitCategory);??
  • fruitCategory.setParentCategory(foodCategory);??
  • ??
  • //?建立食品類別和蔬菜類別之間的關(guān)聯(lián)關(guān)系??
  • foodCategory.getChildCategories().add(vegetableCategory);??
  • vegetableCategory.setParentCategory(foodCategory);??
  • ??
  • //?建立水果類別和蘋果類別之間的關(guān)聯(lián)關(guān)系??
  • fruitCategory.getChildCategories().add(appleCategory);??
  • appleCategory.setParentCategory(fruitCategory);??
  • ??
  • //?建立水果類別和桔子類別之間的關(guān)聯(lián)關(guān)系??
  • fruitCategory.getChildCategories().add(orangeCategory);??
  • orangeCategory.setParentCategory(fruitCategory);??
  • ??
  • //?建立西紅柿類別和蔬菜類別之間的關(guān)聯(lián)關(guān)系??
  • tomatoCategory.setParentCategory(vegetableCategory);??
  • vegetableCategory.getChildCategories().add(tomatoCategory);??
  • ??
  • session.save(foodCategory);??
  • ?SQL schema

    Sql代碼 ?
  • Hibernate:???
  • ????create?table?CATEGORYS?(??
  • ????????id?integer?not?null,??
  • ????????name?varchar(255),??
  • ????????category_id?bigint,??
  • ????????primary?key?(id)??
  • ????)??
  • Hibernate:???
  • ????alter?table?CATEGORYS???
  • ????????add?index?FK36CF3159B3B4FFA?(category_id),???
  • ????????add?constraint?FK36CF3159B3B4FFA???
  • ????????foreign?key?(category_id)???
  • ????????references?CATEGORYS?(id)??
  • ?

    -----------------------------改進代碼---------------------------

    ?

    1.改進實體類

    Java代碼 ?
  • @Entity??
  • @Table(name?=?"tbl_category")??
  • public?class?Category?{??
  • ??
  • ????@Id??
  • ????@GeneratedValue(strategy?=?GenerationType.IDENTITY)??
  • ????private?Integer?id;??
  • ????private?String?name;??
  • ??
  • ????@ManyToOne??
  • ????@JoinColumn(name?=?"category_id")??
  • ????private?Category?parentCategory;?//?父類別??
  • ??
  • ????@OneToMany(mappedBy?=?"parentCategory",?targetEntity?=?Category.class,?cascade?=?CascadeType.ALL)??
  • ????private?Set<Category>?childCategories?=?new?HashSet<Category>();?//?子類別??
  • ??
  • ????//getter?and?setter??
  • ??
  • ????/**?添加子類別?*/??
  • ????public?void?addChildCategory(Category?category)?{??
  • ????????if?(category?==?null)?{??
  • ????????????throw?new?IllegalArgumentException("Can't?add?a?null?Category?as?child.");??
  • ????????}??
  • ????????//?刪除舊的父類別Category??
  • ????????if?(category.getParentCategory()?!=?null)?{??
  • ????????????category.getParentCategory().getChildCategories().remove(category);??
  • ????????}??
  • ????????//?設(shè)置新的父類別Category??
  • ????????category.setParentCategory(this);??
  • ????????//?向當(dāng)前Category對象中加入子類別??
  • ????????this.getChildCategories().add(category);??
  • ????}??
  • }??
  • ?

    2.測試代碼

    Java代碼 ?
  • //?建立食品類別和水果類別之間的關(guān)聯(lián)關(guān)系??
  • ????????????foodCategory.addChildCategory(fruitCategory);??
  • ??
  • ????????????//?建立食品類別和蔬菜類別之間的關(guān)聯(lián)關(guān)系??
  • ????????????foodCategory.addChildCategory(vegetableCategory);??
  • ??
  • ????????????//?建立水果類別和蘋果類別之間的關(guān)聯(lián)關(guān)系??
  • ????????????fruitCategory.addChildCategory(appleCategory);??
  • ??
  • ????????????//?建立水果類別和桔子類別之間的關(guān)聯(lián)關(guān)系??
  • ????????????fruitCategory.addChildCategory(orangeCategory);??
  • ??
  • ????????????//?建立西紅柿類別和蔬菜類別之間的關(guān)聯(lián)關(guān)系??
  • ????????????vegetableCategory.addChildCategory(tomatoCategory);??
  • ??
  • ????????????session.save(foodCategory);??
  • ?

    ?

    ?

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的Hibernate4一对多关系映射(自身关联)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。