【问题标题】:setParameter for a numerical value in Java EE application JPQL query用于 Java EE 应用程序 JPQL 查询中的数值的 setParameter
【发布时间】:2014-10-02 14:45:42
【问题描述】:

我正在使用 Java EE 6 开发应用程序。我需要编写一个搜索功能,这就是我想出的:

    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();

还是不行。 请帮我解决这个问题。

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

1.) “在 EntityManager 中创建查询时发生异常: 异常描述:语法错误解析查询 [SELECT b FROM APP.BOOKENTITY b WHERE ISBN LIKE ?1 OR TITLE LIKE ?2 OR PRICE LIKE ?3 OR BOOKYEAR LIKE ?4 OR BOOKLANGUAGE LIKE ?5],第 1 行,第 17 列:语法[.] 处的错误。 内部异常:UnwantedTokenException(found=., 预期 80)"

2.) “在 EntityManager 中创建查询时发生异常: 异常描述:编译查询时出错 [SELECT b FROM BOOKENTITY b WHERE ISBN LIKE ?1 OR TITLE LIKE ?2 OR PRICE LIKE ?3 OR BOOKYEAR LIKE ?4 OR BOOKLANGUAGE LIKE ?5]。未知实体类型 [BOOKENTITY]。”

3.) “在 EntityManager 中创建查询时发生异常: 异常描述:编译查询时出错 [SELECT b FROM BookEntity b WHERE ISBN LIKE ?1 OR title LIKE ?2 OR price LIKE ?3 OR bookYear LIKE ?4 OR bookLanguage LIKE ?5],第 1 行,第 33 列:未知标识变量 [伊斯本]。查询的 FROM 子句没有声明标识变量 [isbn]。”

4.) “在 EntityManager 中创建查询时发生异常: 异常描述:编译查询时出错 [SELECT b FROM BookEntity b WHERE b.isbn LIKE ?1 OR b.title LIKE ?2 OR b.price LIKE ?3 OR b.bookYear LIKE ?4 OR b.bookLanguage LIKE ?5],第 1 行,第 35 列:类 [ejb.BookEntity] 的未知状态或关联字段 [isbn]。”

5.) "java.sql.SQLSyntaxErrorException: 没有找到名为 'LIKE' 的类型为 'FUNCTION' 且具有兼容参数的授权例程。"

【问题讨论】:

  • 你能发布你收到的例外情况

标签: java java-ee-6 jpql


【解决方案1】:

很抱歉延迟回复。

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

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

对于第 5 个异常,请打印有关异常的更多详细信息(如果有)。另外请检查 setParameters 是否处理 'key' 变量的 BOOKENTITY 的数据类型。

【讨论】:

    猜你喜欢
    • 2013-03-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2021-06-23
    • 2013-08-21
    • 1970-01-01
    相关资源
    最近更新 更多