Java Grails框架方法addTo在多次调用时引发异常
我想向用户类添加订阅,我通过调用“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)) } “参数”来自复选框,用户可以通过设置复选框订阅类别。提交表单
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 }