Я создаю собственный запрос, извлекающий ограниченные поля из нескольких таблиц. Эти поля сопоставляются с конструктором класса проекции с использованием сопоставления результирующих наборов sql. Я пытаюсь выполнить сортировку, передав параметр разбивки на страницы. Атрибуты сортировки определяются с помощью параметра запроса URL-адреса.
Ниже приведены фрагменты кода
<named-native-query
name="EmployeeDet.findEmployeeAddressDTOUsingPageableUsingNativeQuery"
result-set-mapping="CustomEmplMappingUsingXml">
<query><![CDATA[select e.id,e.empName,e.dateOfBirth as dob,e.gender,e.email,address.typename
as addtype,address.addressdet,et.employeeTypeName as employeeType
from employeedet as e,Address as address,employeetype as et
where address.empid=e.id and e.employeeTypeId=et.employeeTypeId
group by e.id,e.empName,e.dateOfBirth,e.gender,e.email,address.typename,
address.addressdet,et.employeeTypeName ORDER BY ?#{#pageable}]]>
</query>
</named-native-query>
<sql-result-set-mapping
name="CustomEmplMappingUsingXml">
<constructor-result
target-class="com.springdatajpa.config.dto.EmployeeAddressDtoProjectionClass">
<column name="id" class="java.lang.Integer" />
<column name="empName" class="java.lang.String" />
<column name="email" class="java.lang.String" />
<column name="dob" class="java.lang.String" />
<column name="gender" class="java.lang.String" />
<column name="addtype" class="java.lang.String" />
<column name="addressdet" class="java.lang.String" />
<column name="employeeType" class="java.lang.String" />
</constructor-result>
</sql-result-set-mapping>
Вышеупомянутый запрос вызывается из уровня репозитория с именем метода, похожим на именованное собственное имя запроса
@Query(nativeQuery=true)
Page<EmployeeAddressDtoProjectionClass> findEmployeeAddressDTOUsingPageableUsingNativeQuery(Pageable pageable);
Упомянутый параметр pageable передается через url со значением
?page=0&size=3&sort=empId,DESC
Поскольку возвращаемое значение имеет тип Page, я использую другой запрос для подсчета количества строк
<named-native-query
name="EmployeeDet.findEmployeeAddressDTOUsingPageableUsingNativeQuery.count">
<query><![CDATA[select count(*) from employeedet as e,Address as address,employeetype et
where address.empid=e.id and et.employeeTypeId=e.employeeTypeId
group by e.id,e.empName,e.dateOfBirth,e.gender,e.email,address.typename,address.addressdet,et.employeeTypeName
]]></query>
</named-native-query>
При выполнении вышеуказанного запроса я получаю сообщение об ошибке
org.springframework.dao.InvalidDataAccessResourceUsageException: Ожидаемое количество позиционных параметров: 1, фактически обнаружено 0
Я пробовал решения, упомянутые в разных ссылках переполнения стека, но все же получаю исключение.