![](/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.