java Spring数据jpa,jpa替换DTO对象的字符串的正向返回列表
我有一个interface
实现了JPARepository
并且有三个方法,其中一个是自定义的@Query
public interface PersonRepository extends JpaRepository<Person, Long> {
List<Person> getPersonBycountryCode(String countryCode);
List<Person> findByCountryCodeAndCity(String string,String city);
@Query(value = "SELECT person.firstName as firstName, person.lastName as lastName, person.countryCode as country, person.city as city,"
+ " SQRT(POWER((69.1 * (person.age - :age )) , 2 )"
+ " + POWER((53 * (person.experience - :experience )), 2)) as eligibility"
+ " FROM Person person"
+ " ORDER BY eligibility ASC")
List<PersonDetailsDto> findPersonDetailsByEligibility(
@Param("age") BigDecimal age,
@Param("experience") BigDecimal experience,
Pageable pageable
);
}
问题是:使用@Query
的方法不返回PersonDetailsDto
列表,而是返回字符串列表(List<List<String>>
)
PersonDetailsDto
是一个POJO类,包含查询输出中描述的所有变量(firstName、lastName、country、city、qualification),也是一个构造函数,所有变量都作为参数。其他两个方法不返回Person对象的列表
有什么想法吗
# 1 楼答案
您可以在@query的查询中使用new关键字。并确保为PersonDetailsDto提供了适当的构造函数,并更改包名
类似的question's answer
# 2 楼答案
就叫它别名吧,对我来说就是这样 例:
# 3 楼答案
实际上
JpaRepository<Person, Long>
意味着,在jpa存储库方法中只能使用Person作为dto对于您的解决方案,您只需在存储库中定义dto接口:
# 4 楼答案
如果我没有错的话,JPA不寻找特定字段的想法是,从表的一行中获取一列或所有列的成本(效率)是相同的。但要解决您的问题,您可以从如下存储库类在
@Query
注释中设置nativeQuery = true
:我希望这能帮助你解决你的问题