使用JPA QL查找包含特定设置元素的所有项目

时间:2013-01-14 21:32:45

标签: java hibernate jpa jpql

我有一个Item类,其中包含SetTag个对象。现在我想找到所有包含 all 所有需要JPA标签的项目(基于Hibernate 4.1.9)。

我的存储库方法获取java.util.Set,此方法的主体如下所示:

entityManager.createQuery("select item from Item as item where item.tags in :tags")
.setParameter("tags", tags)
.getResultList()

对我来说看起来像solution,但我得到的只是错误信息:

  

IllegalArgumentException:org.hibernate.hql.internal.ast.QuerySyntaxException:子树的意外结束[从models.Item中选择项目,其中item.tags in()]

如果我改变了条件

"select item from Item as item where :tags in item.tags"

我认为是正确的(而不是上述查询),我在最后一行(NullPointerException)得到getResultList()

有什么问题?

1 个答案:

答案 0 :(得分:0)

看起来你的tags集合是空的,或者甚至是null,这已知会导致此错误(例如,请参阅this blog)。这会生成您在错误中看到的查询:

select item from models.Item as item where item.tags in ()

如果发送到数据库,可能会导致错误(例如,ERROR 1064 (42000),在MySQL中,语法错误)。

在将tags作为参数添加到查询之前,您需要验证{{1}}是否为空。