【发布时间】: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' 且具有兼容参数的授权例程。"
【问题讨论】:
-
你能发布你收到的例外情况