Страдает ли querydsl теми же ограничениями, что и JPA Criteria API?

JPA Criteria API имеет некоторые важные ограничения. Например:

  • нет поддержки правого внешнего соединения
  • поддержка левого внешнего соединения только в том случае, если отношение в сущностях находится в одном направлении
  • нет поддержки подзапроса ни в предложениях SELECT, ни в предложениях FROM

Есть ли у QueryDsl querydsl-jpa те же ограничения?

А как насчет QueryDsl querydsl-sql?

РЕДАКТИРОВАТЬ: Из документации QueryDsl (без конкретного опыта работы с ней) QueryDsl предоставляет два класса запросов JPAQuery и JPASQLQuery. Первый, кажется, имеет то же ограничение, что и JPA Criteria API, но JPASQLQuery не похоже. Если найду время, углублюсь в код и попробую. Но если кто-то уже что-то знает об этом, то милости просим!


person jeromerg    schedule 13.05.2014    source источник
comment
Criteria API вызывает у меня желание плакать каждый раз, когда я его вижу. Я бы использовал QueryDSL каждый раз, независимо от каких-либо ограничений, которые он может иметь (не то чтобы я говорил, что они есть).   -  person Alan Hay    schedule 13.05.2014
comment
Интересно. Пожалуйста, не стесняйтесь добавлять аргументы!   -  person jeromerg    schedule 13.05.2014


Ответы (1)


Ваше предположение верно. Querydsl JPA имеет те же ограничения, что и упомянутые три ограничения, которые также являются ограничениями JPQL, языка запросов JPA.

JPAQuery предназначен для запросов JPQL, а JPASQLQuery — для собственных (SQL) запросов JPA.

person Timo Westkämper    schedule 14.05.2014
comment
Спасибо, Тимо Весткампер! Просто для уточнения: JPAQuery имеет те же ограничения, что и JPQL, а JPASQLQuery — нет. Это правильно? (Меня смущает имя Querydsl JPA: представляет ли оно только JPAQuery или JPAQuery и JPASQLQuery вместе. - person jeromerg; 15.05.2014
comment
Ты прав. Querydsl JPA — это интеграция Querydsl для запросов JPA API, JPQL (JPAQuery) и SQL (JPASQLQuery). - person Timo Westkämper; 15.05.2014