使用hibernate获取更少的列

Gan*_*row 5 java orm spring dao hibernate

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

Pas*_*ent 11

或者:

  1. 使用投影 - Pro:无需添加 - Con:Not typesafe(结果是List每行的行数Object[]):

    select f.foo, f.bar from FatEntity f
    
    Run Code Online (Sandbox Code Playgroud)
  2. 在SELECT子句中使用构造函数表达式(指定的类不需要是实体或映射到数据库) - Pro:typesafe解决方案 - Con:更多类,除非您重用FatEntity作为holder,在这种情况下,许多字段将是null:

    select new com.acme.FatEntityDetails(f.id, f.foo, f.bar) from FatEntity f
    
    Run Code Online (Sandbox Code Playgroud)

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

  3. 使用映射在同一个表上的另一个实体只包含必填字段 - Pro:这是一个可以修改和更新的真实实体 - Con:更多类.

    from LightEntity
    
    Run Code Online (Sandbox Code Playgroud)

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

  • 2根本不要求持有人是实体.

  • #2中的持有者可以是映射在另一个表上的实体.
  • 如果#2返回实体,则它们处于新状态(这可能是一个问题,或者不是).


lex*_*ore 6

尝试:

SELECT myEntity.one, myEntity.two FROM MyEntity myEntity
Run Code Online (Sandbox Code Playgroud)

你甚至可以这样做:

SELECT new MyEntityDescription(myEntity.one, myEntity.two) FROM MyEntity myEntity
Run Code Online (Sandbox Code Playgroud)

获取实体描述列表.