关闭

在HQL select查询语句中自定义查询结果返回的数据类型

1654人阅读 评论(0) 收藏 举报
分类:

1.select子句用于选择制定的属性或者直接选择某个尸体,当然select选择的属性必须是from后持久化类包含的属性。例如:

select 0.name from Owner o


2.select可以选择任意属性,即不仅可以选择持久化类的直接属性,还可以选择组建属性包含的属性,例如:

select o.name.set from Owner o
    在通常情况下,使用Select子句查询的结果是集合,而集合元素就是select后的实例、属性等组成的object数组
    在特殊情况下,如果select后只有一项(包括持久化实力或属性),则查询得到的集合元素就是该持久化实例或属性

    如果select后有多个项,则每个集合元素就是选择出的多项组成的Object数组,例如如下HQL语句:  
  select o.id ,o from owner o
   执行该HQL语句得到的集合元素是类似于[INT,Owner]结构的Object数组,其中第一个元素是Owner 的id,第二个元素是Owner实例

3.select语句也支持将查询的结果存入一个固定结构的数据类型中

1>将查询结果存入List中
select new List<o.id,o.name> from Owner o
   执行上面的HQL语句后得到一个List<list<int ,String>>,(默认的集合元素是数组)
2>将查询结果存入Map中
select new Map<o.id,o.name>from Owner  o
   执行上面的HQL语句得到一个List<Map<int ,String>>
3>将查询结果存入一个对象中
select new DD<o.id,o.name> from Owner o 
   执行上面的HQL语句得到一个List<DD>
  注:A. 这种情况使用中经常会抛这样的异常:Unable to locate appropriate constructor on class。
       出现这个异常需要检查以下几种情况:
       1)参数构造器的参数类型是否正确
       2)参数构造器的顺序和hql中的顺序是否一致
       3)参数构造器的参数个数是否和hql中的个数一致
      4)参数构造器的参数类型是否TimeStamp
        对于DDTest类没映射到配置文件,通常要求将此hql语句写为:
                           select new 包名.DD<o.id,o.name> from Owner o
4>selset还支持给选中的表达式命名别名
select o.name as ownerName from Owner  o


 

 
   



0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场