0

我有一个Item包含对象Set的类。Tag现在我想使用 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()

对我来说,它看起来像这个解决方案,但我得到的只是错误消息:

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())中得到一个。

怎么了?

4

1 回答 1

0

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

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

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

在将其作为参数添加到查询之前,您需要验证它tags是非空的。

于 2013-01-14T22:13:56.390 回答