Получение пересечения запросов в JPA? - PullRequest
1 голос
/ 31 декабря 2008

У меня есть: "изображение" 1: много

Я хочу выполнить запрос, который будет возвращать все изображения, имеющие не менее тегов [a, b, c]. Мне не ясно, как можно смоделировать это в JPQL. Я мог бы построить строку запроса динамически, но это плохо по соображениям производительности и безопасности. Есть идеи?

Ответы [ 2 ]

2 голосов
/ 02 февраля 2009

In PSEUDO CODE:

SELECT * FROM IMAGES 
  INNER JOIN IMAGETAGS A
    ON IMAGE.ID = A.IMAGEID AND A.TAGID = 'A'
  INNER JOIN IMAGETAGS B
    ON IMAGE.ID = B.IMAGEID AND B.TAGID = 'B'
  INNER JOIN IMAGETAGS C
    ON IMAGE.ID = C.IMAGEID AND C.TAGID = 'C'

Просто угадай, но эквивалент в JPQL будет

Select img from Image img 
 JOIN img.tag ta 
 JOIN img.tag tb 
 JOIN img.tag tc 
  WHERE ta.description = 'A' and tb.description = 'B' and tc.description = 'C'
0 голосов
/ 02 февраля 2009

Как насчет языка запросов jpa

Select img from Image img where img.tag.description in ('A','B','C');
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...