jpql查询manytomany

时间:2011-04-06 09:02:48

标签: playframework jpql

软件< -m:n->标签

我想创建查询以选择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] [SELECT   DISTINCT s FROM models.Software s   INNER JOIN s.tags WHERE s.tags.id =   :TAGID]

我该如何实现它?为什么我有这样的例外?

2 个答案:

答案 0 :(得分:2)

我认为问题可能是您在语句中缺少FROM子句。 给出了错误“Unexpected token:INNER”,因为它需要FROM。

尝试以下查询:

SELECT DISTINCT s FROM Software s INNER JOIN s.tags t WHERE t.id = :tagId

答案 1 :(得分:1)

我会尝试:

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

这应该有用。