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
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