当前位置:编程学习 > JAVA >>

问一个hibernate查询方面的问题,请了解相关内容的高手解答

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

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

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

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

打断点试试,正常应该返回的是Object[] --------------------编程问答--------------------
引用 4 楼 lwb314 的回复:
Quote: 引用 3 楼 zzqangel 的回复:

Quote: 引用 1 楼 lwb314 的回复:

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

这种写法是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函数来作为参数构造这个对象时,遇到参数类型不符的错误,不知道该怎么处理 --------------------编程问答-------------------- 大概明白了,你的ID在数据库里是什么属性的啊如果是varchar的用String, 要是int的你也用int试试 --------------------编程问答-------------------- ……我用数字本身对应的类型做参数类型的时候就报错了,后来又试了很多办法,但都一直报错,主要还是对函数返回值的机制不了解 --------------------编程问答-------------------- 数字的话参数别用(intid1, int id2)用Integer试试 --------------------编程问答--------------------
引用 8 楼 lwb314 的回复:
数字的话参数别用(intid1, int id2)用Integer试试

…我把对象的参数都改成Object了,还是一样报错 --------------------编程问答-------------------- 你看下那个对象映射出来的XML文件,那两个字段属性在XML里是什么类型就写什么类型
补充:Java ,  Java EE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,