程式碼分層導致Hibernate懶載入失效的問題我認為沒有必要考慮
解決失效方案列舉
1.openSessionView 擴大作用域,影響效能,不用
2.在DAO層把需要的初始化,程式碼量大,不採用
3.泛型模版類提供回撥介面,傳入匿名內部物件呼叫初始化,可以採用(自己想的,勉強使用)
1.openSessionView 擴大作用域,影響效能,不用
2.在DAO層把需要的初始化,程式碼量大,不採用
3.泛型模版類提供回撥介面,傳入匿名內部物件呼叫初始化,可以採用(自己想的,勉強使用)
但是我認為考慮這個根本沒必要
我的解決方案是這樣的:
Hibernate 配置:
根據業務,常用的欄位需要join的就fetch=join,不需要的就開lazy,fetch=select
如果某個實體內的一些欄位內,只有某些少數業務查詢需要fetch=join,其他大部分都不需要這部分資料的時候,建議配置檔案開lazy,fetch=select,特殊查詢全用HQL指定left join fetch來抓取指定欄位,下面會說道
使用DAO泛型模板類, 提供各類基礎的查詢模版方法,也提供懶載入的回撥介面,方便初始化懶載入的資料,(解決程式碼分層session關閉後懶載入失效的問題)這個偶爾使用,一般很少使用這些回撥的介面,
因為特殊的關聯查詢我全用模板類提供的HQL查詢的模版方法了,而HQL是可以指定特殊欄位的抓取方式的。
比方說 from Teacher as t left join fetch t.(某個關聯物件) 直接JOIN抓取了,
而直接from Teacher就是預設懶載入,另外值得一提的是HQL查詢裡你配置裡的抓取方式全無效,預設全是lazy+select,需要在程式碼裡指定
反正都要用的資料,直接Join查出來不一樣的嗎,
就算是偶爾碰到未初始化的代理物件,用回撥介面來給它初始化吧
另外附上我的模版類的介面
public interface GenericDaoI<T extends Serializable> { /** * 回撥介面,初始化代理物件用 * * @[author]author[/author] zhaozeyang * */ public interface InitializeObjCallBack<T> { public void initializeObj(final T obj); } /** * 回撥介面,初始化代理物件LIST用 * * @[author]author[/author] zhaozeyang * */ public interface InitializeListCallBack<T> { public void initializeList(final List<T> ls); } /** * 新增一條資料 * * @param entity * 實體 */ public abstract void create(final T entity); /** * 新增一條資料 若存在則更新 * * @param entity */ public abstract void createOrUpdate(final T entity); /** * 根據主鍵查實體 * * @param id * 主鍵 * @return 查詢結果 */ public abstract T findById(final Serializable id); /** * 根據主鍵查實體 * * @param id * @param callback * 回撥介面 * @return */ public abstract T findById(final Serializable id, InitializeObjCallBack<T> callback); /** * 根據id刪資料,可傳多個id * * @param entityids * id序列 */ public abstract void deleteById(Serializable... entityids); /** * 更新實體類到資料庫 * * @param entity * 要更新的實體類 */ public abstract void update(final T entity); /** * 查所有記錄 * * @return 查詢結果 */ public abstract List<T> findAll(); /** * 查所有記錄 * * @param callBack * 回撥介面 * @return */ public abstract List<T> findAll(InitializeListCallBack<T> callBack); /** * HQL查記錄 * * @param strHQL * HQL語句 * @param params * 引數 * @return 查詢結果 */ public abstract List<T> findByHQL(final String strHQL, final Object... params); /** * HQL查記錄 * * @param callBack * 回撥介面 * @param strHQL * HQL語句 * @param params * 引數 * @return 查詢結果 */ public abstract List<T> findByHQL(InitializeListCallBack<T> callBack, final String strHQL, final Object... params); /** * HQL分頁查詢 * * @param strHQL * HQL語句 * @param currentPage * 查第幾頁 * @param pageSize * 一個頁面資料的條數 * @param params * 查詢結果 * @return */ public abstract PageBean<T> findByPage(final String strHQL, final int currentPage, final int pageSize, final Object... params); /** * HQL分頁查詢 * * @param callBack * 回撥介面 * @param strHQL * @param currentPage * @param pageSize * @param params * @return */ public abstract PageBean<T> findByPage(InitializeListCallBack<T> callBack, final String strHQL, final int currentPage, final int pageSize, final Object... params); /** * 用Criteria方式查詢資料 * * @param prams * @return */ public List<T> findByCriteria(Criterion... prams); /** * 用Criteria方式查詢資料 * * @param callBack * 回撥介面 * @param prams * @return */ public List<T> findByCriteria(InitializeListCallBack<T> callBack, Criterion... prams); public Integer getCount(); <p class="indent"> |
[該貼被zhaozeyang於2014-03-22 21:49修改過]
[該貼被zhaozeyang於2014-03-22 21:52修改過]
[該貼被zhaozeyang於2014-03-22 22:09修改過]
[該貼被zhaozeyang於2014-03-22 22:12修改過]
相關文章
- 為什麼我寫了路由懶載入但程式碼卻沒有分割?路由
- hibernate懶載入導致多表聯合查詢失敗
- hibernate懶載入
- Hibernate 之 懶載入
- 什麼是hibernate懶載入?什麼時候用懶載入?為什麼要用懶載入?(轉)
- 懶載入例項--hibernate
- 關於 Laravel mix 導致 Bootstrap 失效的問題Laravelboot
- 99%的程式都沒有考慮的網路異常
- 大家快看哪,JClass的一段原始碼,不是程式碼有問題就是我有問題,不過我想我沒問題。原始碼
- hibernate 的lazy載入問題
- 解決git下載的swoft沒有vender目錄而導致報錯的問題Git
- vue-cli懶載入問題Vue
- Vue程式碼分割懶載入Vue
- 記錄一個由於倉庫層錯誤導致軟刪除失效的問題
- 小程式記憶體問題–圖片懶載入記憶體
- WebMagic多執行緒導致註解失效問題Web執行緒
- 程式碼模板 | 我的程式碼沒有else
- webpack懶載入程式碼原理深究Web
- servlet處理下載的問題,要考慮訪問量大時的效率問題Servlet
- Hibernate Lazy 載入問題的解決
- Hibernate 基本操作、懶載入以及快取快取
- WPF 已知問題 監聽 WMI 事件導致觸控失效事件
- hibernate中不必要的sql update問題SQL
- 自定義導航欄返回按鈕導致返回手勢失效問題
- 關於沒有熔斷降級導致服務重啟問題
- 路由懶載入 在開發環境中導致更新程式碼時間變長得解決方案路由開發環境
- Linux TCP程式設計常見問題考慮LinuxTCP程式設計
- vue-router懶載入速度緩慢問題Vue
- Apache HttpClient 沒有設定time out導致應用長時間阻塞的問題ApacheHTTPclient
- 程式碼分割與懶載入情況下(code-splitting+lazyload)抽離懶載入模組的公用模組程式碼
- Adobe國際認證證書有必要考嗎?
- RLM$SCHDNEGACTION 執行導致負載問題負載
- json解析導致的崩潰問題 cocos2.* 底層問題JSON
- 女生轉行IT和男生要考慮的問題有哪些不一樣?
- IT人進行DFMEA分析時需考慮的潛在失效模式有哪些?模式
- 探究 CSS 混合模式\濾鏡導致 CSS 3D 失效問題CSS模式3D
- 鏈式呼叫 | 我的程式碼沒有else
- SpringBoot分頁查詢 頁碼問題導致返回結果數量為0Spring Boot