小编典典

使用休眠获取更少的列

hibernate

我有一个包含11列的表,但是我需要在我的应用程序中仅获得2列,我使用的是spring / hibernate /
DAO组合。现在,我有一个包含所有11个字段的域类,以及一个映射表中所有11列的映射文件。如何使用仅获得其中的2个?


阅读 252

收藏
2020-06-20

共1个答案

小编典典

要么:

  1. 使用投影-专业:无添加-缺点:不是类型安全的(结果是List一行的行,每行都是Object[])

    select f.foo, f.bar from FatEntity f
    
  2. 在SELECT子句中使用构造函数表达式(不需要将指定的类作为实体或映射到数据库)-Pro:类型安全的解决方案-Con:更多类,除非您重用FatEntity作为持有者,否则将有很多字段null

    select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f
    

请注意,如果在SELECT NEW子句中指定了实体类名称,则生成的实体实例将处于 状态(无持久身份)。

  1. 使用仅在必填字段上映射到同一表的另一个实体-Pro:这是您可以修改和更新的真实实体-Con:更多类。
    from LightEntity
    

#2和#3之间的主要区别是:

  • 2完全不需要持有人成为实体。

  • #2中的所有者可以是映射到另一个表的实体。

  • 如果#2返回实体,则它们处于新状态(这可能是一个问题,也可能不是)。
2020-06-20