Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Grails框架方法addTo在多次调用时引发异常_Java_Database_Grails_Groovy - Fatal编程技术网

Java Grails框架方法addTo在多次调用时引发异常

Java Grails框架方法addTo在多次调用时引发异常,java,database,grails,groovy,Java,Database,Grails,Groovy,我想向用户类添加订阅,我通过调用“addTo”方法来实现,下面是我的代码: if (params.jobs == "on") { user.addToSubscriptions(Category.findWhere(id: 1L)) } else { user.removeFromSubscriptions(Category.findWhere(id: 1L)) } “参数”来自复选框,用户可以通过设置复选框订阅类别。提交表单

我想向用户类添加订阅,我通过调用“addTo”方法来实现,下面是我的代码:

if (params.jobs == "on") {
        user.addToSubscriptions(Category.findWhere(id: 1L))
    } else {
        user.removeFromSubscriptions(Category.findWhere(id: 1L))
    }
“参数”来自复选框,用户可以通过设置复选框订阅类别。提交表单时会调用上面的代码。不起作用的是,当用户更改了1个以上的类别时,请考虑上面使用不同params.x的相同代码,如下所示

    if (params.offers == "on") {
        Category cat = Category.get(2)
        if (!user.subscriptions.contains(cat))
        user.addToSubscriptions(Category.findWhere(id: 2L))//needs long variable
    } else {
        user.removeFromSubscriptions(Category.findWhere(id: 2L))
    }
同样发生的情况是,只有代码中第一个类别被添加和删除,所有其他类别都会引发以下异常:

org.hibernate.exception.GenericJDBCException: Could not execute JDBC batch update
编辑:
但是抛出异常的那一行就是这一行,这对我来说毫无意义

编辑:
当我想添加一个已经添加的类别时,会抛出异常,但它也不会被删除。(这仅适用于代码中未首先处理的类别,不要问我为什么)


我能做什么?

是否可能是您试图删除与用户无关的类别? 就像你知道的。。。用户没有id为2的类别,他发送了params.offers==“off”

也许你应该这样做:

if (params.jobs == "on") {
    user.addToSubscriptions(Category.findWhere(id: 1L))
} else {
    Category cat = Category.get(2L)
    if (user.subscriptions.contains(cat)) {
        user.removeFromSubscriptions(cat)
    }
}
几点提示: 如果您有身份证,请不要使用:

Category.findWhere(id:1L) 
但是:

错误会在粘贴的行上抛出,因为这可能是控制器的最后一行,因此在这一行之后,事务将在抛出错误的地方提交

尝试将此代码添加到控制器:

user.save()
user.errors?.allErrors?.each { println it }

这将打印保存期间发生的所有错误。

hmm谢谢,但没有帮助。问题是,只有当我想添加异常及其已添加的异常时,才会抛出异常。但是我检查了您的方法,如果(!user.subscriptions.contains(cat)),它仍然会被抛出。对于除代码中首先处理的类别以外的所有类别,不可能删除该类别,我在控制台中打印user.subscriptions。遗憾的是,这并没有起到什么作用。我给了你一个投票,因为有了这个if(user.subscriptions.contains(cat),我可以解决另一个我在这里没有提到的问题:)遗憾的是,订阅仍然不起作用。你试过打印错误吗?你能把它们贴在这里吗?我可以看到您在问题中编辑了代码示例,但您忘记编辑else子句。看起来很重要。当然,没问题!2011-07-21 16:42:10251[http-8080-4]ERROR util.jdbceptionReporter-失败的批处理///2011-07-21 16:42:10253[http-8080-4]错误事件。PatchedDefaultFlushEventListener-无法将数据库状态与会话///org.hibernate.exception.Genericjdbception:无法执行JDBC批处理更新///2011-07-21 16:42:10262[http-8080-4]ERROR errors.grailExceptionResolver-处理请求时发生异常:[POST]///ava.sql.BatchUpdateException:failed batch这些是我尝试两次添加类别时出现的错误和异常(代码中的第一个类别除外)抱歉,如果可读性不好,在此文本字段中,不可能换行
Category.get(1L)
user.save()
user.errors?.allErrors?.each { println it }