2017-06-15 88 views
0

我有一種方法可以通過休眠來刪除記錄。我刪除後添加一個查詢。被刪除的記錄仍然在結果列表中。它不應該。這是代碼。實體仍然可以在事務中被休眠刪除後被選中

@Transactional 
public void deleteFoo(long fooId){ 
    Foo foo = fooDao.find(fooId); 
    fooDao.delete(foor); 
    List<Foo> brothers = fooDao.findByParentId(foo.getParentId()); 
    // I think the brothers does not contains foo. 
    // Unfortunately, foo is still in the list. 
    // I do not know why and how to make sure the brothers does not contains foo. 
    ... 
} 

該記錄從承諾交易的數據庫中刪除。

回答

1

您應該刷新休眠會話。

當您通過Hibernate與數據庫一起工作時,您正在使用Hibernate會話。

以下三種情況會將Hibernate會話刷新到數據庫。

  • 提交() - 當你提交事務
  • 在你運行一個查詢
  • 當你調用調用Session.flush()

,或者您可以通過

手動刷新它
session.flush() 
+0

爲什麼它沒有被刷新刪除但在findByParentId之前? – xyz

+0

我的意思是對數據庫的查詢。 –

+0

刪除後我添加了'session.flush()'。但它立即造成了刪除。它破壞了交易配置。 – John

相關問題