用HQL返回整个对象或者某个属性并不希奇。但有时候我们希望返回部分属性组成的轻量级对象(Date transfer object),比如你只想得到一篇文章的标题和作者,而不想看CLOB格式的正文。 HQL已经支持这个东西。
比如
select new Family(mother, mate, offspr) from DomesticCat as mother join mother.mate as mate left join mother.kittens as offspr
你还可以返回 数组,MAP等对象。 See
http://docs.jboss.org/hibernate/core/3.3/reference/en/html/queryhql.html#queryhql-select
这种东西的好处是去掉了"lazy"相关的烦恼。 以LOB字段为例,有的人会建议把Lob字段设成Lazy-Load,仍然返回Model对象,只不过Lob字段为空。 但这样做的坏处是:当你在web层拿到这样一个Model对象是,你不确定它的Lob字段是不是为空。这种不确定性是面向契约编程的大忌。