Hibernate Session的delete()方法
delete()方法用于從數(shù)據(jù)庫(kù)中刪除與Java對(duì)象對(duì)應(yīng)的記錄。如果傳入的參數(shù)是持久化對(duì)象,Session就計(jì)劃執(zhí)行一個(gè)delete語(yǔ)句。如果傳入的參數(shù)是游離對(duì)象,先使游離對(duì)象被Session關(guān)聯(lián),使它變?yōu)槌志没瘜?duì)象,然后計(jì)劃執(zhí)行一個(gè)delete語(yǔ)句。值得注意的是,Session只有在清理緩存的時(shí)候的才執(zhí)行delete語(yǔ)句。此外,只有當(dāng)調(diào)用Session的close()方法時(shí),才會(huì)從Session的緩存中刪除該對(duì)象。
例如以下代碼先加載一個(gè)持久化對(duì)象,然后通過(guò)delete()方法將它刪除:
- Session session1 = sessionFactory.openSession();
- Transaction tx1 = session1.beginTransaction();
- // 先加載一個(gè)持久化對(duì)象
- Customer customer = (Customer)session.get(Customer.class, new Long(1));
- session.delete(customer); // 計(jì)劃執(zhí)行一個(gè)delete語(yǔ)句
- txt1.commit(); // 清理緩存,執(zhí)行delete語(yǔ)句
- session.close();子// 從緩存中刪除Customer對(duì)象
以下代碼直接通過(guò)delete()方法刪除一個(gè)游離對(duì)象:
- Session session2 = sessionFactory.openSession();
- Transaction tx2 = session1.beginTransaction();
- // 假定customer是一個(gè)游離對(duì)象,先使它被Session關(guān)聯(lián),使它變?yōu)槌志没瘜?duì)象,
- // 然后計(jì)劃執(zhí)行一個(gè)delete語(yǔ)句
- session2.delete(customer);
- tx2.commit(); // 清理緩存,執(zhí)行delete語(yǔ)句
- session2.close(); // 從緩存中刪除customer對(duì)象
如果希望刪除多個(gè)對(duì)象,可以使用另一種重載形式的delete()方法:
- session.delete("from Customer as c where c.id>8");
以上delete()方法的參數(shù)為HQL查詢語(yǔ)句,delete()方法將從數(shù)據(jù)庫(kù)中刪除所有滿足查詢條件的記錄。
【編輯推薦】
- Hibernate創(chuàng)建命名策略
- Hibernate的unsaved-value
- Hibernate中g(shù)et和load方法的區(qū)別
- Hibernate Session的saveOrUpdate()方法
- Hibernate區(qū)分不同對(duì)象的方法