Я пытаюсь запустить собственный запрос по методу репозитория, чтобы он возвращал результаты с некоторыми значениями. С JPQL было слишком сложно, поэтому вместо этого я выбрал собственный запрос.Подзапрос репозитория Spring JPA в собственном запросе
Repository
@RepositoryRestResource(collectionResourceRel="projects", path="projects")
interface ProjectRepository extends BaseRepository<Project, Long>, ProjectRepositoryCustom {
@Query(
value="SELECT p.id, p.user_id, p.title, p.description, p.created_on, p.version,(SELECT COUNT(0) FROM projectparts WHERE project_id = p.id) AS parts,(SELECT COUNT(0) FROM requests WHERE project_id = p.id) AS requests FROM projects AS p ORDER BY ?#{#pageable}",
countQuery="SELECT COUNT(0) FROM projects",
nativeQuery=true
)
Page<Project> findAll(Pageable pageable)
}
Объект имеет 2 свойства аннотированные с @Transient
так, что информация не сохраняется в базе данных. Все данные возвращаются штрафом, за исключением 2 переходных свойств, которые возвращают значение null для значений. Когда я копирую запрос с консоли и вставляю его в MySQL Workbench, результаты ожидаются, и я вижу нужные мне счетчики. Во всяком случае, не уверен, есть ли что-то еще, что нужно сделать, чтобы заставить этот собственный запрос работать как аннотация. Я жестко закодировал значение в подзапросе SELECT 55 FROM...
, чтобы увидеть, была ли проблема с подсчетом, и он по-прежнему возвращается как null. Я выполнил запрос в Workbench, и он работает нормально.
Я попытался изменить тип свойства переходного процесса от Integer, Long, BigInteger, long, int...
, и ничто из этого не изменило ситуацию. Поскольку я использую Groovy, я также попробовал def
, чтобы Groovy вывести тип, и это тоже не сработало.
Я также попытался запустить проект с терминала, и он все еще не работает. Я пробовал это на Mac и Linux, и мне не повезло с отображением результатов подсчетов.
спасибо за обратную связь, я должен дать эти опции некоторые мысли. Я почти думаю о том, чтобы позволить JPA создавать столбцы, хотя я их не буду использовать. –
Не надо. Представление будет хорошо работать и даст вам много других преимуществ. –
Вы говорите об использовании 'MySQL View' и просто используете' @ SecondaryTable' для сопоставления дополнительных столбцов? –