Eclipselink意外转义LIKE查询

问题描述:

我需要帮助解决一个奇怪的错误。在Oracle 12和Eclipselink 2.5.2上运行的应用程序具有简单的搜索屏幕,该屏幕使用LIKE子句和“%”作为通配符。Eclipselink意外转义LIKE查询

应用程序使用条件生成器创建查询。 QA测试人员只在搜索屏幕中输入“_”下划线字符。应用程序代码用'%'字符包装用户指定的文本。

new StringBuilder("%").append(param).append("%").toString() 

在运行时,如下查询被执行准备语句参数绑定:

bind => [%\_%, ACTIVE, IT, 20, 0] 

含义意外(至少对我来说)的EclipseLink决定逃离“_”字符与领先的“\”。数据库是Oracle 12.然后我会期望生成的查询带有“ESCAPE'\'”后缀,但这不会发生,并且查询不会返回任何内容,因为如果没有escape子句,则会处理“\ _”,就好像它是原始用户搜索字符串。

我错过了什么?

+0

很奇怪,Oracle 10 e eclipseLink 2.3.2不会发生这种情况。你有没有试过看到wthat的http流量看起来像? – GionJh

+0

通过Oracle设施/日志记录查看调用的SQL,以查看实际传递的内容 –

+0

检查代码并打印出'param'变量以及从StringBuilder构建的结果字符串,但EclipseLink不会转义您传入的任何内容特别是当你使用参数绑定时,除非你已经告诉它。显示您正在构建的实际查询和表达式。 – Chris

Eclipselink不会执行任何转义,这是远程客户端代码中的缺陷。对不起,噪音。