今天碰见一个难题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方便