本帖最后由 zzqangel 于 2013-11-12 15:13:24 编辑

解决方案 »

  1.   

    楼主HQL写法好诡异,之前从来没看过。你这样的语句居然好使了?
    我还是回答你的问题吧,正常查询返回的数据里,如果你查询的是一个对象,那么返回的是这个对象的集合, List里封装的是那个对象类,如果你查询的是几个字段,即使这几个字段在一个对象里,返回的也不是这个对象,而是一个Object[],就是一个Object数组,如果有多条,List里装的就是多个Object数组,楼主取的时候,要强转成Object[],然后具体里边是什么类型,你可以根据你的查询动态的进行类型转换,具体的自己调试的时候看看吧
      

  2.   

    sum(b.price),这是个分组时候用的函数,用在这里不合适吧
      

  3.   

    这种写法是hibernateQL里面专门用来方便用户直接创建对象的写法,以前用过多次,是没有问题的,报错主要是hibernate认为找不到对应的方法,也就是返回值的类型和我构造方法的对象类型不符,因此报错,现在我就不知道到底返回值的类型是什么
      

  4.   

    这种写法是hibernateQL里面专门用来方便用户直接创建对象的写法,以前用过多次,是没有问题的,报错主要是hibernate认为找不到对应的方法,也就是返回值的类型和我构造方法的对象类型不符,因此报错,现在我就不知道到底返回值的类型是什么
    打断点试试,正常应该返回的是Object[]
      

  5.   

    这种写法是hibernateQL里面专门用来方便用户直接创建对象的写法,以前用过多次,是没有问题的,报错主要是hibernate认为找不到对应的方法,也就是返回值的类型和我构造方法的对象类型不符,因此报错,现在我就不知道到底返回值的类型是什么
    打断点试试,正常应该返回的是Object[]
    这个是这样的,比如你写 select new com.xxx.AAA(a.id,b.id) from ATable a, BTable b where a.xx = b.xx;
    这样的语句可以很容易构造出一个列表,列表的每一个对象都是AAA的对象,AAA要求有一个构造函数,像这样public AAA(String id1, String id2),你可以试一下,这样可以很方便的构造对象,不用查询出一个循环列表再把每一个内容拿出来,再依次构造对象,然后再加入到列表中,hibernate在底层都帮我们处理完了。我现在遇到的问题是当使用hibernate函数来作为参数构造这个对象时,遇到参数类型不符的错误,不知道该怎么处理
      

  6.   

    大概明白了,你的ID在数据库里是什么属性的啊如果是varchar的用String, 要是int的你也用int试试
      

  7.   

    数字的话参数别用(intid1, int id2)用Integer试试
      

  8.   

    …我把对象的参数都改成Object了,还是一样报错
      

  9.   

    你看下那个对象映射出来的XML文件,那两个字段属性在XML里是什么类型就写什么类型