繁体   English   中英

使用CrudRepository仅提取某些字段?

[英]Extract only certain fields using CrudRepository?

我正在使用CrudRepository从数据库中获取Persons

是否可以使用CrudRepository映射方法仅从数据库中获取某些字段,而不是整个实体?

示例:我只想提取所有lastname列字段:

interface PersonRepository extends CrudRepository<Person, Long> {
    //of course this is invalid
    List<String> findAllLastname();
}

@Entity
public class Person {
    @Id
    private Long id;


    private String firstname, lastname;
}

findAllLastname()当然是无效的,但是我可以实现吗?

为查询批注提供特定的SQL查询应该可以

@Query("select p.lastName from Person  p")
List<Person> getAllLastName();

您可以执行以下操作来获取特定字段:

@Query("select p.lastName from Person p")
List<String> getAllLastName();

但是有时这可能不起作用(例如, 对于enum type )。 IMO最好的方法是将投影用作返回类型,例如:

public interface PersonProjection {
    String getLastName();
}

@Query("select p.lastName as lastName from Person p")
List<PersonProjection> getAllPersonProjections();

在这种情况下,如果将来您不仅需要获取lastName ,还需要获取firstName则可以简单地更新PersonProjection和查询方法:

public interface PersonProjection {
    String getFirstName();
    String getLastName();
}

@Query("select p.firstName as firstName, p.lastName as lastName from Person p")
List<PersonProjection> getAllPersonProjections();

请注意,您应该使用与投影中的吸气剂名称相对应的实体字段的别名( p.firstName as firstName )。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM