Grails GORM-在.get()函数处获取sql异常

Grails GORM-在.get()函数处获取sql异常,grails,groovy,gorm,Grails,Groovy,Gorm,嗨,我正在使用GORM,数据库中有一个用户表。我还有一个更新用户配置文件的更新方法。当我尝试更新联系人时,第一次尝试可以,但第二次或有时第三次尝试后,我会 ERROR org.hibernate.transaction.JDBCTransaction - Could not toggle autocommit java.sql.SQLException: Error during query: Unexpected Exception: java.lang.ArrayIndexOutOfBoun

嗨,我正在使用GORM,数据库中有一个用户表。我还有一个更新用户配置文件的更新方法。当我尝试更新联系人时,第一次尝试可以,但第二次或有时第三次尝试后,我会

ERROR org.hibernate.transaction.JDBCTransaction - Could not toggle autocommit
java.sql.SQLException: Error during query: Unexpected Exception: java.lang.ArrayIndexOutOfBoundsException message given: 3
尝试执行此操作时出现异常:

User updateUser(User tempUser){
    def id=tempUser.id
    User user = User.get(id)//this line throws exception

首先,没有足够的信息

User updateUser (User tempUser) {
    def id=tempUser.id
    User user = User.get(id)//this line throws exception
你为什么这样做?此代码是否在域类中

您可以在控制器中以经典方式更新用户实例:

def userInstance = User.get(params.id)
if(userInstance) {
    userInstance.properties = params
    if (!userInstance.hasErrors() && userInstance.save(flush: true)) {
        flash.message = "User was updated successfully"
        // redirect somewhere
    }
}
def userInstance = User.get(params.id)
if(userInstance.updateUserInstance(params)) {
    // do something
}
您还可以尝试将方法添加到用户实例(在用户域类中),如下所示:

Class User {
    [...]

    def updateUserInstance(params) {
        it.properties = params
        if (!it.hasErrors() && it.save(flush: true)) {
            return true // or return it
        } else {
            return false
        }
    }
}
然后在控制器中调用它:

def userInstance = User.get(params.id)
if(userInstance) {
    userInstance.properties = params
    if (!userInstance.hasErrors() && userInstance.save(flush: true)) {
        flash.message = "User was updated successfully"
        // redirect somewhere
    }
}
def userInstance = User.get(params.id)
if(userInstance.updateUserInstance(params)) {
    // do something
}
我没有测试上面的代码片段,所以要小心。关于您的代码,如果您能提供更多的代码,那就太好了:用户类的一部分,updateUser方法的更多部分


问候。

我编辑了tim_yates,您可以查看