Spring数据jpa,jparepository返回字符串列表代替DTO对象

Ash*_*pta 5 java spring jpa spring-data spring-data-jpa

我有一个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
  );
}
Run Code Online (Sandbox Code Playgroud)

问题是:方法用@Query不返回列表PersonDetailsDto但返回列表的列表(List<List<String>>).

PersonDetailsDto是一个POJO类,其中包含查询输出(firstName,lastName,country,city,eligibility)中描述的所有变量,以及包含所有变量作为Parameters的构造函数.其他两个方法确实返回Person对象的列表.

任何的想法?

Gri*_*pal 0

如果我没记错的话,JPA 不查找特定字段背后的想法是,从表的一行中获取一列或所有列的成本(效率方面)相同。但是为了解决您的问题,您可以在注释nativeQuery = true@Query设置像这样的存储库类:

public static final String FIND_SOMETHING = "SELECT somethingId, somethingName FROM something";

@Query(FIND_SOMETHING, nativeQuery = true)
public List<Object[]> findSomethings();
Run Code Online (Sandbox Code Playgroud)

我希望这将帮助您解决您的问题。