Как написать запрос Union All в Query DSL

Необходимо реализовать sql-запрос, например:

SELECT A.class, A.section 
FROM 
STUDENT A 
INNER JOIN DEPARTMENT on A.student_id = B.id 
WHERE DEPT_NBR is not null
UNION ALL
SELECT A.class, A.section 
FROM 
TEACHER A 
INNER JOIN DEPARTMENT on A.teacher_id = B.id 
WHERE DEPT_NBR is not null

Как я могу написать такое заявление с помощью QueryDSL? (Я не использую JPA). Любая помощь/подсказка очень ценится!


person Suriya    schedule 19.06.2017    source источник


Ответы (2)


Есть много примеров, которые могут вам помочь.

public void union_multiple_columns() throws SQLException {
        SubQueryExpression<Tuple> sq1 = query().from(employee).select(employee.firstname, employee.lastname);
        SubQueryExpression<Tuple> sq2 = query().from(employee).select(employee.lastname, employee.firstname);
        List<Tuple> list = query().union(sq1, sq2).fetch();
        assertFalse(list.isEmpty());
        for (Tuple row : list) {
            assertNotNull(row.get(0, Object.class));
            assertNotNull(row.get(1, Object.class));
        }
    }

Этот пример был взят из самого проекта: https://github.com/querydsl/querydsl/blob/8f96f416270d0353f90a6551547906f3c217833a/querydsl-sql/src/test/java/com/querydsl/sql/UnionBase.java#L73

person natros    schedule 09.07.2017

чтобы другие не искали это слишком много... JPA не поддерживает объединения , поэтому querydsl при работе поверх JPA не поддерживает объединения. Однако он поддерживает их при работе поверх необработанного SQL, см. Ответ natros для этого.

person Emmanuel Touzery    schedule 21.06.2019