[Hibernate] 用HQL选取若干个属性拼成一个对象

用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字段是不是为空。这种不确定性是面向契约编程的大忌。

Leave a Comment

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.