BeetlSQL最近的更新新增了@OrmQuery
註解,做用是能夠讓內置生成的SQL自動去延遲級聯加載對象,此功能的增長讓BeetlSQL在ORM功能方面徹底有了抗衡Hibernate的資本。這麼新鮮刺激的功能,不嚐鮮一下簡直對不起正使用BeetlSQL的本身,更是對不起BeetlSQL的做者@閒·大賦呢!git
假定有城市City和省份Province兩個Pojo,分別都註解上了@OrmQuery
,本意是想當查詢城市City時能延遲級聯查詢對應的省份Province,或查詢省份Province時能夠延遲級聯查詢該省份下面的所有City列表,理想很豐滿,現實卻很骨感。咱們直接使用Beetl或者JSP等模板引擎直接在頁面上輸出以及級聯加載時沒有任何問題。sql
凡事都有個可是~~~當咱們使用Fastjson序列化某一個查詢結果時可怕的事情發生了,互相@OrmQuery
致使Fastjson序列化時會一直查詢下去,相似於死循環。數據庫
舉個栗子,具體表現爲:當查詢深圳市,由於有@OrmQuery
級聯關係,Fastjson自動序列化到tails(tails爲Pojo繼承了TailBean後的一個屬性,用於BeetlSQL內部級聯加載時存放代理對象等使用)的province時BeetlSQL又會去數據庫查詢廣東省,而後Fastjson繼續序列化廣東省,序列化到廣東省的tails下面的city時BeetlSQL又會去數據庫獲取整個廣東省下面的city列表,而後Fastjson又會一一序列化每一個city,每一個city裏面又有tails,如此反覆...簡直就是死循環,仍是拉上數據庫一塊兒死的節奏。。json
其實解決方法很簡單,當兩個Pojo若是雙方互相都設置了@OrmQuery
時請至少給一方設置一個Fastjson的註解@JSONType(ignores="tails")
,讓Fastjson中斷序列化BeetlSQL級聯查詢的關鍵小尾巴tails。.net