使用者user與role,resource關聯都是lazy,而使用spring security時,使用者登陸成功需要預先取得user的所有許可權資源,專案的寫法是:
listuserlist = userdao.find("select distinct u from user u left join fetch u.roles r left join fetch r.resources s where u.name=? and u.enabled = 1", username);
另我迷惑不解的是,是lazy就是使用者在需要角色資源時,就直接可以取到,因為我們配置了opensessioninviewfilter,為什麼還要在取使用者時還要用left join fetch去取角色和資源,
10.1那天無聊時想起,opensessionviewfilter是指jdbc session與http request的生命週期同步,從乙個請求開始到返回頁面時opensessionview會保持資料庫連線開啟,頁面處理完成後當前資料庫session關閉。
而我所看到的user如果不用left join fetch則登陸成功後,乙個請求完成則當前資料庫連線關閉,當然你在後面使用lazy取角色和資源時出現session已經關閉的錯誤。到這裡就知道要用left join fetch一次性將所有角色資源物件取到。
看書更多需要思考和實踐!
Hiberante中的QBC檢索方式
qbc就是query by criteria qbc是hibernate提供的幾種檢索方式之一。一 這裡先小做乙個總結 hibernate檢索物件的方式有哪些呢?1 導航物件圖檢索方式。根據已經載入的物件,導航到其他物件。比如 對於已經載入的班級物件class1.呼叫它的getstudents 方法...
hibernate中lazy的使用
lazy 延遲載入 lazy 的有效期 只有在 session 開啟的時候才有效 session 關閉後lazy 就沒效了。lazy 策略可以用在 標籤上 可以取值true false 標籤上,可以取值true false,這個特性需要類增強 等集合上,可以取值為true false extra 等...
hibernate中lazy的使用
lazy,延遲載入 lazy的有效期 只有在session開啟的時候才有效 session關閉後lazy就沒效了。lazy策略可以用在 標籤上 可以取值true false 標籤上,可以取值true false,這個特性需要類增強 等集合上,可以取值為true false extra 等標籤上,可以...