Chinaunix首页 | 论坛 | 博客
  • 博客访问: 967378
  • 博文数量: 168
  • 博客积分: 3853
  • 博客等级: 中校
  • 技术积分: 1854
  • 用 户 组: 普通用户
  • 注册时间: 2008-01-15 23:50
文章分类

全部博文(168)

文章存档

2014年(12)

2013年(46)

2012年(60)

2011年(11)

2010年(1)

2009年(17)

2008年(21)

我的朋友

分类: Java

2012-11-21 15:30:18

今天碰见一个难题,Hibernate中使用hql查询,如果有懒加载,那么在使用springMVC当中会出现转换json的错误,即懒加载导致对象json化失败。(有两种方法:第一种是网友提供)

第一种

懒加载obj的时候,此时obj是具有一个代理对象的,所以json转化的时候函数认为这个对象是存在的,所以依然去执行get方法进行

转化。但实际上是,加入此时obj实际上为空,也就是代理对象返回的实际对象是空,那么就会报上面所说的nullException了

为了解决这个问题查了很多资料,最后觉得如果是obj的懒加载问题,那么在使用hql查询的时候不查出这个懒加载对象不就行了吗?

照着这个方向,研究了下Hibernate只取出需要用到的字段

 首先Hibernate是支持这样查询的,查询语句如下

  1. String hql = "select new Product(p.id, p.name, p.image) from Product p where p.valid=:valid order by p.id";   


但是使用这个语句会出现错误:

  1. org.hibernate.hql.ast.QuerySyntaxException: Unable to locate appropriate constructor on class.....    


这个说明没有使用对应的构造函数。

注意了同学们:上面的hql语句中有new Product(p.id, p.name, p.image) 这端代码,这端代码其实是创建一个新的Product对象,那么就需要与此相同的一个构造函数,上面的错误就是告诉你,hibernate没有找到对应的构造函数

好了问题找到了,咱们添加构造函数吧,记住这个构造函数的参数一定要与你hql中想取得的参数一模一样

如下:

  1. //要与hql中的代码高度一致  
  2. public Product(Long id, String name, String image){  
  3.     this.id = id;  
  4.     this.name = name;  
  5.     this.image = image;  
  6. }  


再次运行,就OK了

 

这个事情告诉咱们,要换位思考哦~


第二种:

            JsonConfig jsonConfig = new JsonConfig(); 
            jsonConfig.setCycleDetectionStrategy(CycleDetectionStrategy.LENIENT);
java转换成json时,防止无限循环。问题解决,明显添加JsonConfig方便
阅读(2805) | 评论(0) | 转发(0) |
0

上一篇:Spring中Quartz的配置

下一篇:Spring单元测试

给主人留下些什么吧!~~