select子句
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了select子句相关的知识,希望对你有一定的参考价值。
select子句
select子句用于选择指定的属性或者直接选择某个实体,当然select选择的属性必须是from之后持久化类包含的属性:
select p.name from Person as p
select可以选择任何属性,不仅可以选择持久化类的直接属性,还可以选择组件属性包含的属性:
select p.name.firstName from Person as p
通常情况下,select子句查询的结果是集合,集合的元素就是select后的实例、属性等组成的数组;在特殊情况下,如果select后只有一项(包括持久化实例或属性),则查询到的集合元素就是该持久化实例或属性;如果select后有多项,则每个集合元素就是选择出的多项组成的数组。
sekect p.name,p from Person as p
在执行该HQL语句后,得到的集合元素是类似[String,Person]结构的数组,其中第一个元素是Person实例的name属性,第二个元素是Person实例。
即使select后列出了某个持久化类的全部属性,这些属性依然是属性,它们不会被Hibernate自动封装成对象。只有在select后的列表里给出实例名或者别名,Hibernate才回将这一项封装成一个持久化实体。
select也支持将选择的属性存入一个list对象中:
select new list(p.name,p.address) from Person as p
也可以将选择出的属性直接封装成对象,前提是产生此对象的类具有属性相关的构造器:
select new ClassTest(p.name,p.address) from Person as p
select也支持给选中的表达式命名别名:
select p.name as personName from Person as p
给选中的表达式命名别名的用法常与new map结合使用:
select new map(p.name as personName) from Person as p
执行上面的HQL语句返回的结果是集合,其中的集合元素是Map对象,以personName作为Map的key,实际选出的值作为Map的value。
以上是关于select子句的主要内容,如果未能解决你的问题,请参考以下文章