搜索并发现了很多关于此的问题,但对于我的具体情况没有任何问题。我的HQL查询出错,这是代码:
String year = "";
ArrayList<String> loc = new ArrayList<>();
// Set above variables to something here
//
query = em.createQuery("select distinct x.fmlName, " +
" x.email " +
" from person x " +
" where x.year = :selYear " +
" and ((:selLoc = 'ALL') " +
" or x.loc IN (:selLoc)) ");
query.setParameter("selYear", year);
query.setParameter("selLoc", loc);
return query.getResultList();
这是错误:
Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is
java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected AST node: {vector}
我对Hibernate相对较新,并且我正在努力解决这个问题,因为错误消息并不是非常有用。有任何想法吗?
答案 0 :(得分:0)
你有问题:
" and ((:selLoc = 'ALL') "
//----------------------------^
这应该是字段的名称,或者字符串,所以:
:selLoc
应该是字段的名称,这是不可能的,要像这样使用它,因为当您使用setPrameter("field", "fieldname")
时,您的查询应该看起来像'fieldname' = 'ALL'
这样不正确,因为字段不应该在2个引号之间答案 1 :(得分:0)
(:selLoc)
更改为:selLoc
。在HQL中使用Java List
时,如下所示: ... WHERE x.loc IN :myList
myList
不得括在括号中。
(:selLoc = 'ALL')