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

最佳答案

任何一个:

  • 使用投影-Pro:无需添加任何内容-Con:不是类型安全的(结果是行的List,其中每一行都是Object[]):
     select f.foo, f.bar from FatEntity f
    
  • 在SELECT子句中使用构造函数表达式(不需要将指定的类作为实体或映射到数据库)-Pro:类型安全的解决方案-Con:更多类,除非您将FatEntity重复用作持有人,否则许多字段将为null:
     select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f
    
    请注意,如果在SELECT NEW子句中指定了实体类名称,则生成的实体实例将处于新状态(无持久身份)。
  • 使用仅在必填字段上映射到同一表的另一个实体-Pro:这是您可以修改和更新的真实实体-Con:更多类。
     from LightEntity
    

  • #2和#3之间的主要区别是:
  • 2完全不需要持有人为实体。
  • #2中的持有者可以是映射到另一个表上的实体。
  • 如果#2返回实体,则它们处于新状态(这可能是一个问题,也可能不是)。
  • 10-04 22:23