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,到底怎麼樣可以查到這些資料