Java EE应用程序JPQL查询中数值的setParameter

Java EE应用程序JPQL查询中数值的setParameter,java,java-ee-6,jpql,Java,Java Ee 6,Jpql,我正在用JavaEE6开发一个应用程序。我需要编写一个搜索函数,这就是我想到的: books=getEntityManager().createQuery( "SELECT b FROM BookEntity b WHERE b.ISBN LIKE ?1 OR b.title LIKE ?2 OR b.price = ?3 OR b.bookYear = ?4 OR b.bookLanguage LIKE ?5") .setParameter(1, key) .setParameter(

我正在用JavaEE6开发一个应用程序。我需要编写一个搜索函数,这就是我想到的:

    books=getEntityManager().createQuery(
"SELECT b FROM BookEntity b WHERE b.ISBN LIKE ?1 OR b.title LIKE ?2 OR b.price = ?3 OR b.bookYear = ?4 OR b.bookLanguage LIKE ?5")
.setParameter(1, key)
.setParameter(2, key)
.setParameter(3, key)
.setParameter(4, key)
.setParameter(5, key)
.getResultList();
这导致了异常,我发现问题在于price和bookYear是浮点值和整数值,并且该方法仅适用于字符串字段。所以我试着如下:

    books=getEntityManager().createQuery(
"SELECT b FROM BookEntity b WHERE b.ISBN LIKE ?1 OR b.title LIKE ?2 OR b.price = ?3 OR b.bookYear = ?4 OR b.bookLanguage LIKE ?5")
.setParameter(1, key)
.setParameter(2, key)
.setParameter(3, Float.parseFloat(key))
.setParameter(4, Integer.parseInt(key))
.setParameter(5, key)
.getResultList();
它仍然不起作用。 请帮我做这个

老实说,我认为它们是最没有帮助的例外,因为它们没有描述与问题相关的任何内容。这些是我每次调试应用程序时得到的异常,每个调试会话一个。我已经按照获得它们的顺序列出了它们:

一,。在EntityManager中创建查询时发生异常: 异常说明:解析查询时出现语法错误[从APP.BOOKENTITY b中选择b,其中ISBN类似于?1或TITLE类似于?2或PRICE类似于?3或BOOKYEAR类似于?4或BOOKLANGUAGE类似于?5],第1行第17列:[.]处出现语法错误。 内部异常:UnwantedTokenExceptionfound=,应为80

二,。在EntityManager中创建查询时发生异常: 异常说明:编译查询时出错[从簿记实体b中选择b,其中ISBN类似于?1或标题类似于?2或价格类似于?3或簿记年类似于?4或簿记语言类似于?5]。未知实体类型[BOOKENTITY]

三,。在EntityManager中创建查询时发生异常: 异常说明:编译查询时出错[从簿记实体b中选择b,其中ISBN类似?1或标题类似?2或价格类似?3或簿记年份类似?4或簿记语言类似?5],第1行第33列:未知标识变量[ISBN]。查询的FROM子句未声明标识变量[isbn]

四,。在EntityManager中创建查询时发生异常: 异常描述:编译查询时出错[从BookEntity b中选择b,其中b.isbn类似于?1或b.title类似于?2或b.price类似于?3或b.bookYear类似于?4或b.bookLanguage类似于?5],第1行第35列:类[ejb.BookEntity]的未知状态或关联字段[isbn]


五,。java.sql.SQLSyntaxErrorException:未找到具有兼容参数的“FUNCTION”类型的名为“LIKE”的授权例程。

很抱歉回复延迟

首先,您在代码中显示的查询看起来是正确的。我尝试了一个类似的参数化LIKE的例子,效果很好。但是我很困惑,为什么所有的setParameters都使用“key”变量。请检查在使用setParameter方法设置参数时是否注意BOOKENTITY实体的数据类型

所有前4个异常都是有效的,看起来您已经纠正了它们,如果我正确的话,最后出现了第5个异常


对于第五个例外情况,请打印更多有关例外情况的详细信息(如有)。另外,请检查setParameters是否处理了“key”变量的BOOKENTITY的数据类型。

您可以发布收到的异常吗