我有一个包含11列的表,但我需要在我的应用程序中只获取其中的2个,我使用spring / hibernate / DAO组合。现在我有一个包含所有11个字段的域类,以及映射表中所有11列的映射文件。我如何使用它们中只有2个而不是全部?
答案 0 :(得分:10)
或者:
使用投影 - 专业:无需添加任何内容 - 符号:非类型安全(结果为List
行,其中每行为Object[])
:
select f.foo, f.bar from FatEntity f
在SELECT子句中使用构造函数表达式(指定的类不需要是实体或映射到数据库) - Pro:typesafe解决方案 - Con:更多类,除非您重用{{1作为持有者,在这种情况下,许多字段将是FatEntity
:
null
请注意,如果在select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f
子句中指定了实体类名,则生成的实体实例处于 new 状态(无持久标识)。
使用映射在同一个表上的另一个实体只包含必填字段 - Pro:这是一个可以修改和更新的真实实体 - Con:更多类。
SELECT NEW
#2和#3之间的主要区别是:
答案 1 :(得分:6)
尝试:
SELECT myEntity.one, myEntity.two FROM MyEntity myEntity
你甚至可以这样做:
SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity
获取实体描述列表。
答案 2 :(得分:2)
如果您从不需要超过表的这两列,则可以更改hibernate映射以仅将那些需要的列映射到实体类。仅映射要在应用程序中访问的表列。请记住,可以违反“忽略”列上的数据库约束,例如非空约束,外键或唯一约束。