【发布时间】:2016-03-14 03:06:13
【问题描述】:
当应用程序连接到 MYSQL 实例时,我有一个查询失败。使用 H2 内存数据库时,查询工作正常。所有其他查询都适用于 MYSQL。
错误消息:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在第 1 行的 ')' 附近使用正确的语法
控制器动作:
def index() {
def currentUser = currentUser()
def peopleFollowing = currentUser.following
def c = Post.createCriteria()
def postList = c.list {
'in' ("user", peopleFollowing)
'order' "dateCreated", "desc"
}
[postList:postList, user : currentUser, peopleFollowing:peopleFollowing]
}
当我删除 in 子句时,查询会针对 MYSQL 运行。因此,似乎是:'in'(“user”,peopleFollowing)导致了这个问题。我认为问题在于 in 是一个 MYSQL 保留字。我试过使用反引号,但不断收到语法错误......?
class Post {
String content
Date dateCreated
User user
static belongsTo = [user : User]
static hasMany = [postComments: PostComment]
static constraints = {
content (blank: false)
}
static mapping = {
sort dateCreated:"desc"
content type:"text"
postComments sort:"dateCreated", order:"desc"
}
}
类帖子{ 字符串内容 日期 dateCreated 用户用户 静态的 belongsTo = [用户:用户] 静态 hasMany = [postComments: PostComment] 静态约束 = { 内容(空白:假) } 静态映射 = { 排序 dateCreated:"desc" 内容类型:“文本” postComments sort:"dateCreated", order:"desc" } } 类帖子{ 字符串内容 日期 dateCreated 用户用户 静态的 belongsTo = [用户:用户] 静态 hasMany = [postComments: PostComment] 静态约束 = { 内容(空白:假) } 静态映射 = { 排序 dateCreated:"desc" 内容类型:“文本” postComments sort:"dateCreated", order:"desc" } }
【问题讨论】:
-
我会查看生成的 SQL 并从那里开始。对于它的价值,
in实际上是一个 groovy 保留字,必须用引号引起来;order不保留,不需要引号 -order("dateCreated", "desc") -
能否请您添加相关域来发帖
-
您使用的是哪个 MySQL 版本?
-
我似乎记得我们不得不将我们的“用户”实体重命名为“OurAppNameUser”,因为这个确切的原因......
-
感谢大家的想法..我能够确定 order 子句本身可以工作。尽管我在我的应用程序的其他条件查询中使用了它,但认为“用户”这个词可能会导致问题的想法绝对是正确的。我正在使用带有 Grails 2.0.3 的 MySQL 5.6.27 也许我只需要一个不同的版本?我要看看生成的 sql.. 我当然希望我不必重命名我的用户类。任何更多的想法都会很棒。我将编辑我的帖子以包含相关域..
标签: grails