![](/img/trans.png)
[英]How to select only specific fields using spring 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.