我有一个Item
类,其中包含Set
个Tag
个对象。现在我想找到所有包含 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()
。
有什么问题?
答案 0 :(得分:0)
看起来你的tags
集合是空的,或者甚至是null,这已知会导致此错误(例如,请参阅this blog)。这会生成您在错误中看到的查询:
select item from models.Item as item where item.tags in ()
如果发送到数据库,可能会导致错误(例如,ERROR 1064 (42000)
,在MySQL中,语法错误)。
在将tags
作为参数添加到查询之前,您需要验证{{1}}是否为空。