首页 > 代码库 > select子句

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