Spring данные JPA и queryDSL с небольшим сложным SQLJAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Spring данные JPA и queryDSL с небольшим сложным SQL

Сообщение Anonymous »

Я использовал Spring Data JPA и QueryDSL для поиска данных в базе данных;
Таблица A:



id
имявозраст




1< /td>
Джо
20


2
Валет
22


3
роза
24


< /table>
Таблица Б:



id
realtion_id
тип
помощь




1
13
9
1

< tr>
2
13
0
2


3
13
8
3



вот это SQL: выберите A.* из A левого соединения B на A.id = B.aid
где (B.realtionId = 13 и B.type = 9) или (B.realtionId = 13 и B.type = 0)
Как я могу использовать JPA или QueryDSL для выполнения этого SQL?
Реальный код немного больше, вопрос выше — это всего лишь основная проблема.
Вот код:

Код: Выделить всё

        QCourseware qCourseware = QCourseware.courseware;
QCoursewareRelation qCoursewareRelation = QCoursewareRelation.coursewareRelation;
BooleanExpression expression = qCoursewareRelation.relationId.eq(coursewareParam.getOwner())
.and(qCoursewareRelation.relationType.eq(CoursewareRelationType.PERSON))
.or(qCourseware.userId.eq(coursewareParam.getDeptId())
.and(qCoursewareRelation.relationType.eq(CoursewareRelationType.DEPARTMENT)));

JPAQuery countQuery = new JPAQuery(entityManager);
countQuery.select(Expressions.asSimple("id").count()).from(qCourseware)
.leftJoin(qCourseware.relations, qCoursewareRelation)
.where(expression);
long count = countQuery.fetchFirst();

JPAQuery query = new JPAQuery(entityManager);
List result = query.from(qCourseware)
.leftJoin(qCourseware.relations, qCoursewareRelation)
.where(expression)
.offset(pageable.getOffset())
.limit(pageable.getPageSize())
.fetch();
return new PageImpl(result.stream().map(this::copyToBody).toList(), pageable, count);
Основная проблема заключается в этой линии.

Код: Выделить всё

 BooleanExpression expression = qCoursewareRelation.relationId.eq(coursewareParam.getOwner())
.and(qCoursewareRelation.relationType.eq(CoursewareRelationType.PERSON))
.or(qCourseware.userId.eq(coursewareParam.getDeptId())
.and(qCoursewareRelation.relationType.eq(CoursewareRelationType.DEPARTMENT)));
Они генерируют SQL следующим образом:

Код: Выделить всё

r1_0.c_relation_id = ? AND r1_0.c_relation_type = ? OR r1_0.c_relation_id = ? AND r1_0.c_relation_type = ?
Между ключевым словом или левой и правой стороной нет круглых скобок.
Изменить: я использую спецификацию, но это тоже не работает

Подробнее здесь: https://stackoverflow.com/questions/787 ... omplex-sql
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Spring Boot / JPA: «Невозможно найти дескриптор объекта» после установки взаимосвязи @onetoone в NULL с QueryDsl
    Anonymous » » в форуме JAVA
    0 Ответы
    2 Просмотры
    Последнее сообщение Anonymous
  • Spring Boot / JPA: «Невозможно найти дескриптор объекта» после установки взаимосвязи @onetoone в NULL с QueryDsl
    Anonymous » » в форуме JAVA
    0 Ответы
    3 Просмотры
    Последнее сообщение Anonymous
  • Не может импортировать импорт com.querydsl.jpa.impl.jpaquery;
    Anonymous » » в форуме JAVA
    0 Ответы
    15 Просмотры
    Последнее сообщение Anonymous
  • Не может импортировать импорт com.querydsl.jpa.impl.jpaquery;
    Anonymous » » в форуме JAVA
    0 Ответы
    23 Просмотры
    Последнее сообщение Anonymous
  • Не может импортировать импорт com.querydsl.jpa.impl.jpaquery;
    Anonymous » » в форуме JAVA
    0 Ответы
    10 Просмотры
    Последнее сообщение Anonymous

Вернуться в «JAVA»