jpql query manytomany - PullRequest
       15

jpql query manytomany

1 голос
/ 06 апреля 2011

software <-m: n-> tag

Я хочу создать запрос для выбора всех программ, где tag.id = id

Я пишу:

TypedQuery query =
              Software.em().createQuery(
               "SELECT DISTINCT s FROM Software s INNER JOIN s.tags WHERE s.tags.id = :tagId",
               Software.class
              );
              query.setParameter("tagId", tagId);

В результате я получил:

Обнаружено исключение java.lang.IllegalArgumentException, org.hibernate.QueryException: недопустимая попытка разыменования коллекции [software0_.id.tags] со ссылкой на свойство элемента [id][ВЫБЕРИТЕ ОТЛИЧИЕ ОТ МОДЕЛЕЙ. ВНУТРЕННЕЕ СОЕДИНЕНИЕ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ s.tags ГДЕ s.tags.id =: tagId]

Как я могу это реализовать?а почему у меня такое исключение?

Ответы [ 2 ]

2 голосов
/ 06 апреля 2011

Я думаю, что проблема может заключаться в том, что вы пропускаете предложение FROM в своем утверждении. Ошибка "Неожиданный токен: ВНУТРЕННИЙ", потому что он ожидает ОТ.

Попробуйте следующий запрос:

SELECT DISTINCT s FROM Software s INNER JOIN s.tags t WHERE t.id = :tagId
1 голос
/ 06 апреля 2011

Я бы попробовал с:

Query q = JPA.em().createQuery("SELECT DISTINCT s FROM Software s join fetch s.tags t WHERE t.id = :tagId");
q.setParameter("tagId", tagId);

Это должно работать.

...