sql - 在grails准备好的语句上使用like时引发异常

标签 sql hibernate grails prepared-statement

由于我无法使用Hibernate createCriteria实现所需的查询,因此我坚持使用常见的Mysql连接。但是当我使用参数化查询时,由于某种原因,查询的一部分失败了。
返回数据源连接的代码是

def getSqlInstance(){            
def conn = dataSource.connection
Sql sql = new Sql(conn)
return sql;
}

当我使用以下形式的变体查询时
def conn = getSqlInstance(); 
def result = conn.rows("select distinct u.user_id from user_role u inner join (select id from role where authority like %:roles% )r on u.role_id = r.id",params)

我得到以下异常

您的SQL语法有误。检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的u.role_id = r.id'上使用'%')r附近。
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:SQL语法有错误;检查与您的MySQL服务器版本对应的手册以获取正确的语法,以在第1行的u.role_id = r.id'上使用'%')r附近

有人可以帮忙吗

最佳答案

另一个解决方案是基于SQL的

def result = conn.rows("select distinct u.user_id from user_role u inner join 
                        (select id from role where authority like 
                         concat('%',:roles,'%') ) r on u.role_id = r.id",
                       params)

关于sql - 在grails准备好的语句上使用like时引发异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22810372/

相关文章:

java - Hibernate 抛出无法删除或更新父行异常

Grails - 创建自定义 PersistenceEventListener

java - 我可以使用来自另一个 Controller 的 POST 参数作为方法来调用 Controller 操作吗?

SQL - 检索指定记录日期时间字段两侧 X 秒内出现的所有记录

mysql - MySQL 中何时使用单引号、双引号和反引号

java - Java SE 6 中的 JPA/Hibernate,数据访问的最佳实践

sql - 更改默认列值会导致 Hibernate 出现问题吗?

mysql - 删除 MySQL 中的重复行

sql - newid() 与 Entity Framework 6 Code First

java - 如何调试 ContextLoader - 上下文初始化失败和 BeanCreationException