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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

hibernate映射一对多双向关联关系实例

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

在電子商務(wù)應(yīng)用中,經(jīng)常會有這樣的需求:根據(jù)給定的客戶,得到該客戶的所有訂單;根據(jù)給定的訂單,得到該訂單的所屬客戶。對于這種雙向關(guān)聯(lián)的情況,在Hibernate應(yīng)用中,也有人叫多對一雙向關(guān)聯(lián),只是叫法不同而已,都是通過映射一對多雙向關(guān)聯(lián)關(guān)系來實現(xiàn)的。

不管是多對一單向關(guān)聯(lián)還是(一對多)多對一雙向關(guān)聯(lián),在關(guān)系型數(shù)據(jù)庫中的表現(xiàn)方式都是一樣的,均通過外鍵參照來實現(xiàn)如圖4-18所示。

?
?

只是在持久化類與ORM映射文件中單向關(guān)聯(lián)與雙向關(guān)聯(lián)存在一些區(qū)別而已,如圖4-19所示。

?

??
?

?

持久化類Customer.java:

  • package?com.ORM;?
  • import?java.io.Serializable;?
  • import?java.util.*;?
  • public?class?Customer?implements?Serializable{?
  • ????private?java.lang.Integer?id;???????????????//ID號?
  • ????private?java.lang.String?cname;?????????????????//客戶姓名?
  • ????private?java.lang.String?bank;??????????????//銀行賬號?
  • ????private?java.lang.String?phone;?????????????????//聯(lián)系電話?
  • ????private?Set?orders?=?new?HashSet();?????????????//訂單集合?
  • ????public?Customer(){}?????
  • ????//省略上述各屬性的get/set方法對?
  • }?
  • 持久化類Orders.java:

  • package?com.ORM;?
  • import?java.io.Serializable;?
  • public?class?Orders?implements?Serializable{?
  • ????private?java.lang.Integer?id;???????????????//ID號?
  • ????private?java.lang.String?orderno;???????????????//訂單編號?
  • ????private?java.lang.Double?money;?????????????????//訂單金額?
  • ????private?Customer?customer;??????????????//訂單的所屬客戶?
  • ????public?Orders(){}?
  • ????//省略上述各屬性的get/set方法對?
  • }?
  • customer表與Customer類的ORM映射文件Customer.hbm.xml:

  • <hibernate-mapping?package="com.ORM">?
  • ????<class?name="Customer"?table="customer">?
  • ????????<id?name="id"?column="ID"?type="integer">?
  • ????????????<generator?class="identity"/>?
  • ????????</id>??
  • ????????<property?name="cname"?column="CNAME"?type="string"?/>?
  • ????????<property?name="bank"?column="BANK"?type="string"?/>?
  • ?

    ??
    ?

    ?

    orders表與Orders類的ORM映射文件Orders.hbm.xml:

    ?

    ??
    ?

    ?

    (1)創(chuàng)建供測試用的TestBean.java。

  • …… ?
  • ????public?void?addCustomer(){?
  • Customer?customer?=?new?Customer();?
  • customer.setCname("張三");?
  • customer.setBank("123456789123456789");?
  • customer.setPhone("020-12345678");?
  • dao.addCustomer(customer); ?
  • ????}????
  • ????public?Customer?loadCustomer(Integer?id){?
  • return?dao.loadCustomer(id);?
  • ????}?
  • ????public?void?addOrders(Customer?customer){?
  • Orders?order?=?new?Orders();?
  • order.setOrderno(new?Long(System.currentTimeMillis()).toString());?
  • order.setMoney(new?Double(rnd.nextDouble()*10000));?
  • //將Customer與Orders實例進行雙向關(guān)聯(lián) ?
  • order.setCustomer(customer); ?
  • customer.getOrders().add(order); ?
  • dao.addOrders(order); ?
  • ????}????
  • ????public?Orders?loadOrders(Integer?id){?
  • return?dao.loadOrders(id);?
  • ????}?
  • ……?
  • (2)創(chuàng)建測試JSP頁面index.jsp。


  • <jsp:useBean?id="test"?class="com.bean.TestBean"?/>?
  • ...........
  • index.jsp運行分析。

    (1)執(zhí)行了test.addCustomer()以后,Hibernate向數(shù)據(jù)庫服務(wù)器提交的SQL語句為:

  • 【SQL】insert?into?customer?(CNAME,?BANK,?PHONE)?values?
  • ("張三",?"123456789123456789","020-12345678")?
  • (2)執(zhí)行了test.loadCustomer(id)以后,Hibernate向數(shù)據(jù)庫服務(wù)器提交的SQL語句為:

  • 【SQL】select?*?from?customer?where?ID=1?
  • select?*?from?orders?where?CUSTOMER_ID=1?
  • 由于Customer.hbm.xml中的lazy="false",在裝載Customer后,會立即裝載與當前Customer對象一對多關(guān)聯(lián)的所有Orders對象。

    (3)執(zhí)行了test.addOrders(customer);以后,Hibernate向數(shù)據(jù)庫服務(wù)器提交的SQL語句為:

  • 【SQL】insert?into?orders(ORDERNO,MONEY,CUSTOMER_ID)?
  • values("1163858590843",7158.76,1)?
  • (4)執(zhí)行了test.loadOrders(newInteger(1));以后,Hibernate向數(shù)據(jù)庫服務(wù)器提交的SQL語句為:

  • 【SQL】select?*?from?orders?where?ID=1?
  • select?*?from?customer?where?ID=1?
  • 由于Orders.hbm.xml中的lazy="false",在裝載Orders后,會立即裝載與當前Orders對象多對一關(guān)聯(lián)的Customer對象。

    index.jsp運行效果如圖4-20所示。

    ??
    分享:

    6

    總結(jié)

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

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