2011-11-04 32 views
4

在我的數據庫代碼中,我使用了一些Hibernate本機SQL查詢(插入,刪除,更新)。我知道,當我使用HQL並且緩存打開時,每當我使用HQL調用數據庫時,數據庫的狀態都是穩定的。但是,我想知道如果我使用本機SQL查詢會發生什麼,例如我插入一些數據(但不要提交它),而我嘗試使用HQL查詢獲取一些數據。我會得到插入的數據嗎?在Hibernate中將HQL與本機SQL混合時數據庫的狀態

任何提示?

回答

0

我會說,它取決於底層數據庫和事務設置。但即使HQL被轉換爲本地SQL並執行。只要您保持在同一事務中,您將能夠通過HQL加載使用原生SQL進行的更改。但請記住,HQL查詢與緩存,代理和其他休眠的東西交互 - 可能會有一些奇怪的問題,因爲natiev SQL完全繞過了這一點(這是本機查詢的目的 - 快速繞過所有休眠的東西)

0

添加到Konstantin Pribluda的答案我可以說,在相反的情況下:通過Hibernate添加數據(即使使用session.save()),然後使用本機SQL獲取數據導致本機SQL查詢不會獲取添加的數據。

因此,當在DAO中使用不同類型的查詢時,我總是在使用本機SQL查詢之前刷新會話......永遠不會知道哪個方法在Service層中混合。

0

是的,你會得到它,因爲所有的DAO查詢都會逐一執行,無論是HQL還是SQL。所以,如果插入查詢是第一個按順序,那麼你會得到插入的記錄。