【问题标题】:jpql query manytomanyjpql查询多态
【发布时间】:2011-07-30 15:35:50
【问题描述】:

软件 标签

我想创建查询以选择 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]

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

【问题讨论】:

    标签: playframework jpql


    【解决方案1】:

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

    尝试以下查询:

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

    【讨论】:

    • 我已修复。也许,但是当我输入 FROM 时,我得到:已捕获 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]
    • 试试这个:SELECT DISTINCT s FROM Software s INNER JOIN s.tags t WHERE t.id = :tagId.
    【解决方案2】:

    我会尝试:

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

    这应该可行。

    【讨论】:

      猜你喜欢
      • 2021-10-31
      • 2013-09-06
      • 1970-01-01
      • 2013-06-11
      • 2014-12-17
      • 1970-01-01
      • 1970-01-01
      • 2017-11-17
      • 2011-07-29
      相关资源
      最近更新 更多