Hibernate多對多的理解

來源:互聯網
上載者:User

Studetn類實現序列化介面
Integer id
String name
set coursers

Course類實現序列化介面
Integer id
String name
set students

注意事項:
1,configuration.configure("cn/itcast/many2many/hibernate.cfg.xml");應該寫全路徑!
2,設定檔和對應檔應該在包裡和.java是同層級的!!

重要知識點總結:
1,在多對多的對應檔裡,要是此set設定了反轉,那麼不可以再設定級聯操作。否則報錯。
比如今天的例子在學生裡設定:inverse="true" cascade="true"是錯誤的!!!!!在第一次向各個表裡放資料時就是錯誤的!!
2,兩端都是映射到了中間表student_course!!!!!!!!!!!!!!!!

 

 
今天把多對多敲了一下,對於key的理解比昨天要清楚,準確好多,現在總結如下。     
     
many to many
學生端的對應檔
<set name="courses" table="student_course"  inverse="true">      
  <key column="sid" />               
  <many-to-many  class="cn.itcast.many2many.Course"  column="cid" />   
</set>

以學生端的設定檔為例子
明確視點:站在學生端
明確目標:查看一個學生選了什麼課程
明確方法:依靠此學生的id去中間表student_course查該生選修課程資訊(中間表只有sid,cid),即可知道了cid.再通過cid去課程表查詢
就知道了此課程的詳細資料
查詢語句:……………………………………where sid=該生的id;

這就是我們要看courses集合裡到底有什麼課程的過程。
所以sid就是我們要得到courses的必經之路。
翻譯成大白話就是:屬性courses集合集合裡面的東西叫name="courses"來自table="student_course"類型是
class="cn.itcast.many2many.Course"。我們要通過中間表得到裡面的資料除了要提供一個查詢條件(該生id)還要明白滿足
什麼條件(where sid=該生的id)才是能得到我們想要的資訊。
總結:key就是我們想得到courses時要用到的中間表student_course的欄位

還有一點:column="cid" 通過課程表的外鍵查詢課程的其他資訊即select id,name from course 課程id=cid

注意:兩個column都是來自於中間表student_course!!!

 

一對多也應該這麼理解
用戶端的對應檔
<set name="orders" table="orders" cascade="delete" inverse="true" lazy="true">
        <key>                              
            <column name="customer_id"/>
        </key>
        <one-to-many class="cn.itcast.hibernate.many2one.Order"/>
</set>

 

這些是昨天寫的廢話:
翻譯:裡面有一個集合來存放學生選的課程叫courses。就用這個set來描述此欄位course
      它們來自於表student_course
      同理,key是用來描述table屬性的。就是說這個表和我(學生表)產生聯絡的是sid
      many to many 的class屬性用來描述集合裡面的東西是什麼類型的。
     
      這是一個中間表。是一個橋樑。我們要走過這個橋樑,從一端到另一段。
      左端就是學生,右端就是課程。
      這個橋樑和我產生聯絡的就是sid  左端這是
      我要去的右端是通過cid去的。 就是說我們要查到學生選的什麼課程,要通過中間表的cid欄位。
    
      所以說這many  to  many標籤有兩個作用
      1,說明了集合裡存放資料的類型
      2,到底怎麼樣可以查到這些資料

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.