Hibernate多對多2
-
資料庫的多對多 1.1 資料庫中不能直接對映多對多 處理:建立一個橋接表(中間表),將一個多對多關係轉換成兩個一對多
注1:資料庫多表聯接查詢 永遠就是二個表的聯接查詢
A B C D t1 C t2 D t3
注2:交叉連線 注3:外連線:left(左)/right(右)/full(左右) 主從表:連線條件不成立時,主表記錄永遠保留,與null匹配
A B AB select * from A,B,AB WHERE A.aID=AB.aID and b.bid = AB.bid where 在hibernate中,你只管查詢當前表物件即可, hibernate會欄位關聯橋表以及關聯表查詢出關聯物件
-
hibernate的多對多 2.1 hibernate可以直接對映多對多關聯關係(看作兩個一對多)
-
多對多關係注意事項 3.1 一定要定義一個主控方 3.2 多對多刪除 3.2.1 主控方直接刪除 3.2.2 被控方先通過主控方解除多對多關係,再刪除被控方 3.2.3 禁用級聯刪除 3.3 關聯關係編輯,不需要直接操作橋接表,hibernate的主控方會自動維護
案例: 級聯新增 inverse屬性值的設定 級聯刪除
package com.zking.five.dao;
import java.io.Serializable;
import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.Transaction;
import com.zking.five.entity.Book; import com.zking.tow.util.SessionFactoryUtils;
public class BookDao { public Book get(Book book) { Session session = SessionFactoryUtils.getSession(); Transaction transaction = session.beginTransaction(); Book b = session.get(Book.class, book.getBookId()); if(b != null && new Integer(1).equals(book.getInitCategories())) { Hibernate.initialize(b.getCategories()); } transaction.commit(); session.close(); return b; }
public Integer add(Book book) {
Session session = SessionFactoryUtils.getSession();
Transaction transaction = session.beginTransaction();
Integer bid = (Integer) session.save(book);
transaction.commit();
session.close();
return bid;
}
public void del(Book book) {
Session session = SessionFactoryUtils.getSession();
Transaction transaction = session.beginTransaction();
session.delete(book);
transaction.commit();
session.close();
}
}
package com.zking.five.dao;
import org.hibernate.Hibernate; import org.hibernate.Session; import org.hibernate.Transaction;
import com.zking.five.entity.Book; import com.zking.five.entity.Category; import com.zking.tow.util.SessionFactoryUtils;
public class CategoryDao { public Category get(Category category) { Session session = SessionFactoryUtils.getSession(); Transaction transaction = session.beginTransaction(); Category c = session.get(Category.class, category.getCategoryId()); if(c != null && new Integer(1).equals(category.getInitBooks())) { Hibernate.initialize(c.getBooks()); } transaction.commit(); session.close(); return c; }
/**------------------six----------------**/
public Integer add(Category category) {
Session session = SessionFactoryUtils.getSession();
Transaction transaction = session.beginTransaction();
Integer cid = (Integer) session.save(category);
transaction.commit();
session.close();
return cid;
}
/**
* 1銆佽鎺ф柟閫氳繃涓繪帶鏂規潵瑙i櫎鍏寵仈鍏崇郴
* 2銆佸湪鍘誨垹闄よ鎺ф柟
* @param category
*/
public void del(Category category) {
Session session = SessionFactoryUtils.getSession();
Transaction transaction = session.beginTransaction();
Category c = session.get(Category.class, category.getCategoryId());
for (Book b : c.getBooks()) {
// c.getBooks().remove(b); b.getCategories().remove©; } session.delete©; transaction.commit(); session.close(); }
}