今天碰見一個難題Hibernate中使用hql查詢如果有懶加載那麼在使用springMVC當中會出現轉換json的錯誤即懶加載導致對象json化失敗(有兩種方法:第一種是網友提供)
第一種
懶加載obj的時候此時obj是具有一個代理對象的所以json轉化的時候函數認為這個對象是存在的所以依然去執行get方法進行
轉化但實際上是加入此時obj實際上為空也就是代理對象返回的實際對象是空那麼就會報上面所說的nullException了
為了解決這個問題查了很多資料最後覺得如果是obj的懶加載問題那麼在使用hql查詢的時候不查出這個懶加載對象不就行了嗎?
照著這個方向研究了下Hibernate只取出需要用到的字段
首先Hibernate是支持這樣查詢的查詢語句如下
[html] view plaincopyprint?
String hql = select new Product(pid pname pimage) from Product p where pvalid=:valid order by pid;
但是使用這個語句會出現錯誤:
[html] view plaincopyprint?
orghibernatehqlastQuerySyntaxException: Unable to locate appropriate constructor on class
這個說明沒有使用對應的構造函數
注意了同學們:上面的hql語句中有new Product(pid pname pimage) 這端代碼這端代碼其實是創建一個新的Product對象那麼就需要與此相同的一個構造函數上面的錯誤就是告訴你hibernate沒有找到對應的構造函數
好了問題找到了咱們添加構造函數吧記住這個構造函數的參數一定要與你hql中想取得的參數一模一樣
如下:
[html] view plaincopyprint?
//要與hql中的代碼高度一致
public Product(Long id String name String image){
thisid = id;
thisname = name;
thisimage = image;
}
再次運行就OK了
這個事情告訴咱們要換位思考哦~
第二種:
JsonConfig jsonConfig = new JsonConfig();
jsonConfigsetCycleDetectionStrategy(CycleDetectionStrategyLENIENT);
java轉換成json時防止無限循環問題解決明顯添加JsonConfig方便
From:http://tw.wingwit.com/Article/program/Java/ky/201311/28897.html