由于我无法使用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'附近的'%'附近使用正确的语法.Stacktrace如下: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法中有错误;检查与您的MySQL服务器版本对应的手册,以便在'%'附近使用正确的语法。)在第1行的u.role_id = r.id'
请有人帮忙解决这个问题
答案 0 :(得分:1)
我弄清楚我做错了什么,我不得不将%
表示为要传递给自己的地图的一部分。我使用
`def result = conn.rows("select distinct u.user_id from user_role u inner join (select id from role where authority like ? )r on u.role_id = r.id","%"+role+"%")`
答案 1 :(得分:1)
另一个解决方案是基于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)