我有一个包含11列的表,但是我需要在我的应用程序中仅获得2列,我使用的是spring / hibernate / DAO组合。现在,我有一个包含所有11个字段的域类,以及一个映射表中所有11列的映射文件。如何使用仅获得其中的2个?
要么:
使用投影-专业:无添加-缺点:不是类型安全的(结果是List一行的行,每行都是Object[]):
List
Object[])
select f.foo, f.bar from FatEntity f
在SELECT子句中使用构造函数表达式(不需要将指定的类作为实体或映射到数据库)-Pro:类型安全的解决方案-Con:更多类,除非您重用FatEntity作为持有者,否则将有很多字段null:
FatEntity
null
select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f
请注意,如果在SELECT NEW子句中指定了实体类名称,则生成的实体实例将处于 新 状态(无持久身份)。
SELECT NEW
from LightEntity
#2和#3之间的主要区别是:
#2中的所有者可以是映射到另一个表的实体。