簡體   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