Grails查询数据库

Grails查询数据库,grails,Grails,我正在尝试使用以下方法查询grails中的数据库: def per = User.get(springSecurityService.principal.id) def query = Post.whereAny { author { username == per.username } }.order 'dateCreated', 'desc' messages =

我正在尝试使用以下方法查询grails中的数据库:

            def per = User.get(springSecurityService.principal.id)
            def query = Post.whereAny {
                author { username == per.username }
            }.order 'dateCreated', 'desc'
            messages = query.list(max: 10)
我的用户位于用户域中,在Post域中,我有:

    String message
    User author
    Date dateCreated
每次在控制器中填充数据库的方法为:

  def updateStatus() {
         def status = new Post(message: params.message)
        System.out.println("test " + params.message)
            status.author = User.get(springSecurityService.principal.id)
        status.save()
    }
我对在grails中查询数据库非常陌生,所以如果有人能推荐一些阅读本文的内容,这也会很好


感谢新版本的spring security core插件为您的控制器添加方法,因此您可以替换:

def per = User.get(springSecurityService.principal.id)
def query = Post.whereAny {
    author { username == per.username }
}.order 'dateCreated', 'desc'
messages = query.list(max: 10)

没有声明springSecurityService

您可以将updateStatus操作替换为:

def updateStatus(){
    def status = new Post(message: params.message, author: principal)
    status.save()
}

空查询可通过以下方式解决:

def updateStatus() {
     def status = new Post(message: params.message)
    System.out.println("test " + params.message)
        status.author = User.get(springSecurityService.principal.id)
    status.save(flush: true)
}
这可能有助于您以后查找数据,因为save()只为hibernate上下文提供了持久化数据的指令,但并不强制hibernate在此时执行该指令。传递flush:true将强制立即持久化数据。另外,status.save(failOnError:true)将显示域对象属性是否存在验证问题,从而阻止域实例保存到数据库(通过引发异常)。如果需要,可以同时使用这两种方法:

def updateStatus() {
     def status = new Post(message: params.message)
    System.out.println("test " + params.message)
        status.author = User.get(springSecurityService.principal.id)
    status.save(flush: true, failOnError: true)
}
希望有帮助

您可以在grails app/conf/Config.groovy中全局设置flush和failOnError:true:

grails.gorm.failOnError=true
grails.gorm.autoFlush=true
grails.gorm.failOnError=true
grails.gorm.autoFlush=true