GORM - получение sql исключения в функции .get () - PullRequest
0 голосов
/ 30 июня 2011

привет, я использую 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

1 Ответ

1 голос
/ 01 июля 2011

Прежде всего, недостаточно информации.

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
    }
}

Также вы можете попробовать добавить метод в экземпляр пользователя (в классе домена пользователя)что-то вроде этого:

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.updateUserInstance(params)) {
    // do something
}

Я не тестировал фрагменты кода выше, так что будьте осторожны.А что касается вашего кода, было бы неплохо, если бы вы дали еще немного кода: части класса User, больше метода updateUser.

С уважением.

...