У меня есть интерфейс, который расширяет CrudRepository и реализует метод с @Query аннотация с атрибутом nativeQuery настроен на true. Этот метод возвращает список объекта.Spring Data JPA - Исходный запрос на репозитории crud работает с объединениями?
Пример:
public interface MessageTemplateRepository extends CrudRepository<MessageTemplate, Integer> {
@Query(nativeQuery = true, "select template.* from plan_granted_template granted join license license on granted.fk_plan = license.fk_plan join message_template template on granted.fk_message_template = template.id where license.fk_garage = ?2 and template.message_type = ?1")
public List<MessageTemplate> findGrantedTemplatesByMessageTypeAndGarage(MessageType messageType, Garage garage);
}
Гараж имеет один Лицензия
Лицензия имеет один план и гараж
План имеет много MessageTemplate
Класс лицензии имеет ManyToOne отношения с планом и Отношение OneToOne к гаражу
(таблица лицензии - столбцы fk_plan и fk_garage)
План класс имеет ManyToMany отношения с MessageTemplate
(таблица plan_granted_template - столбцы fk_plan и fk_message_template)
Класс MessageTemplate имеет atribute MessageType
(таблица message_template - столбец message_type)
Этот метод должен вернуть весь объект MessageTemplate, найденный в запросе, но всегда возвращает пустой список. Выполнение этого запроса в mysql возвращает правильный результат. Также, глядя на журналы Hibernate, запрос выполняется с правильными параметрами, но в любом случае возвращается пустой список.
Я думаю, что Spring выполняет запрос, но он не может преобразовать resultSet в экземпляр MessageTemplate.
Почему вы не используете JPQL вместо этого native, у вас есть ваши объекты, сопоставленные? – Koitoer
Да, у меня есть отображаемые объекты. У меня есть dificulties с jpql, но этот запрос, выполненный в mysql, возвращает результат правильно = ( –
Не уверен, что ваши параметры MessageTemplate messageTemplate воспроизводит weel с template.message_type =? 1, вы пытались передать String messageTemplate, я имею в виду преобразование между messageTemplate и String, необходимые в запросе, попробуйте добавить DEBUG, чтобы увидеть, как параметры отправляются в базу данных. – Koitoer