软件< -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]
我该如何实现它?为什么我有这样的例外?
答案 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);
这应该有用。