Генерация динамического запроса при весенней загрузке

У меня есть собственный запрос Mysql

select tl_id,c_name,m_name,u_first_name,t_name, 
tl_logged_at,tl_minutes,tl_description
from users inner join clients on u_id=c_frn_owner_id
inner join matters on m_frn_client_id = c_id
inner join tasks on t_frn_matter_id = m_id
inner join task_logs on tl_frn_task_id = t_id
where c_id =2 and m_id=4 and t_id= 3 and u_id = 4

для которого я могу написать JPQL вместо собственного запроса. Но как получить тот же запрос с помощью JPA Specification, поскольку столбцы или поля в условиях wherec_id, m_id, t_id и u_id являются необязательными. Это параметры фильтра, предоставляемые пользователю.

Создание собственного запроса может быть выполнено с использованием условий if. Но они подвержены опечаткам и SQL Injections.

В документации JPASpecification нет информации, связанной с объединением нескольких таблиц.

Официальный документ спецификации Spring JPA

Я новичок в JPASpecification, поэтому любое руководство будет мне полезно.

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
0
935
2

Ответы 2

JPA 2 introduces a criteria API that you can use to build queries programmatically.

Если вы используете JPA 2 и хотите создать динамический запрос, я думаю, вам следует взглянуть на API критериев для создания динамических запросов. Или вы можете использовать JpaSpecificationExecutor (я еще не пробовал). Проверьте вопрос, связанный с это.

Прилагаются некоторые полезные ссылки:

  1. JPA Технические характеристики
  2. API критериев JPA

Взгляните на проект querydsl, я широко использую его в ERP среднего размера и до сих пор не разочаровался.

http://www.querydsl.com/static/querydsl/latest/reference/html/

для динамического предложения where: вы можете использовать com.querydsl.core.BooleanBuilder

Итак, когда у вас есть querydsl, вы можете сначала сгенерировать предложение where, как показано ниже.

QEmployee employee = QEmployee.employee;
 BooleanBuilder dynamicWhere = new BooleanBuilder();
 if (true) { //Any condition
     dynamicWhere.and(employee.name.equalsIgnoreCase("someName"));
 }
 if (true){
     dynamicWhere.and(employee.age.gt(18));
 }

а затем вы можете написать свой запрос следующим образом.

queryFactory.selectFrom(employee)
    //joins, group by, order by goes here
    .where(dynamicWhere)
    .fetch();

Другие вопросы по теме