hibernate多對多關係的新增與刪除
阿新 • • 發佈:2018-11-01
程式碼
bookdao
public Integer save(Book book) { Session session = SessionFactoryUtils.getSession(); Transaction transaction = session.beginTransaction(); Integer bid = (Integer) session.save(book); transaction.commit(); SessionFactoryUtils.closeSession(); return bid; } public void del(Book book) { Session session = SessionFactoryUtils.getSession(); Transaction transaction = session.beginTransaction(); session.delete(book); transaction.commit(); SessionFactoryUtils.closeSession(); }
categorydao
public Integer save(Category category) { Session session = SessionFactoryUtils.getSession(); Transaction transaction = session.beginTransaction(); Integer cid = (Integer) session.save(category); transaction.commit(); SessionFactoryUtils.closeSession(); return cid; } /** * 被控方刪除失敗 因為被控方被中間表所引用 * * 1,解除關聯關係(先刪除中間表的引用資料) * 2,再刪除主表資訊 * @param category */ public void del(Category category) { Session session = SessionFactoryUtils.getSession(); Transaction transaction = session.beginTransaction(); // session.delete(category);直接刪除失敗 Category c = session.get(Category.class, category.getCategoryId()); for(Book b :c.getBooks()) { // c.getBooks().remove(b); b.getCategories().remove(c);//主控方移除與被控方的關係 } session.delete(c); transaction.commit(); SessionFactoryUtils.closeSession(); }
bookTest
/** * hibernate通過操作持久態物件來操作資料庫 * 配置檔案中配置的是把關係交給book管理 */ @Test public void testSave() { //新增一本書籍 Book book = new Book(); book.setBookName("最好的我們"); book.setPrice(100f); Category c = new Category(); c.setCategoryId(4); // book.getCategories().add(c);這個時候的Category是臨時態的物件 book.getCategories().add(this.categoryDao.getCategory(c)); bookdao.save(book); } @Test public void testSave2() { //把關係交給書籍型別管理 Category c = new Category(); c.setCategoryName("言情"); Book book = new Book(); book.setBookId(1); c.getBooks().add(bookdao.getBook(book)); categoryDao.save(c); } /** * 主控方的刪除 * 結果:一併將從表關聯的中間表資訊刪除 */ @Test public void testDel() { Book book = new Book(); book.setBookId(1); bookdao.del(book); } /** * 被控方的刪除 * */ @Test public void testDel2() { Category c = new Category(); c.setCategoryId(4); categoryDao.del(c); }