3 回答
TA貢獻1790條經驗 獲得超9個贊
我不是 100% 確定這一點。在執行搜索之前嘗試關閉當前會話并打開另一個會話。
session.close();
session = sessionFactory.openSession();
這應該清除之前創建的(延遲初始化的)實體。
TA貢獻1848條經驗 獲得超10個贊
嘗試加載要刪除的實例并將其刪除。
private boolean deleteById(Class<?> type, Serializable id) {
Object persistentInstance = session.load(type, id);
if (persistentInstance != null) {
session.delete(persistentInstance);
return true;
}
return false;
}
boolean result = deleteById(Product.class, new Long(41));
TA貢獻1795條經驗 獲得超7個贊
首先,在查詢新實體之前,您需要檢查舊實體是否存在。您可以直接嘗試將實體傳遞給 session.delete(),以刪除該對象。如果在數據庫中沒有找到需要處理的記錄,應該有一個異常。事實上,我們通常不會真正了解這種情況。我們總是刪除一個現有的實體,我的意思是通常的邏輯是這樣的;所以,如果已經完成,則無需這樣做。你可以簡單地這樣做,
Entity1 ent = session.load(Entity1.class, '1234');
session.delete(ent);
或者你可以這樣做,
Entity1 ent = new Entity1('1234'); // used constructor for brevity
session.delete(ent);
順便說一句,你也可以使用這個版本的 session.delete(String query),
session.delete("from Entity1 e where e.id = '1234'"); // Just found it is deprecated
添加回答
舉報
