日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

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

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

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

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

?
?

只是在持久化類與ORM映射文件中單向關聯與雙向關聯存在一些區別而已,如圖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;?????????????????//聯系電話?
  • ????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)創建供測試用的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實例進行雙向關聯 ?
  • order.setCustomer(customer); ?
  • customer.getOrders().add(order); ?
  • dao.addOrders(order); ?
  • ????}????
  • ????public?Orders?loadOrders(Integer?id){?
  • return?dao.loadOrders(id);?
  • ????}?
  • ……?
  • (2)創建測試JSP頁面index.jsp。


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

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

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

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

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

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

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

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

    ??
    分享:

    6

    總結

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

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