注册到我的Grails应用程序后,用户会收到一封带有确认链接的电子邮件。单击该链接,将她带到相应的“启用”操作。
这完美无瑕。但是,现在似乎有一个非常特定的令牌出现错误,该令牌的user.save()失败了:
assert !user.isDirty() // assertion is ok user.enabled = true user.confirmationToken = null assert user.isDirty() // assertion is ok if (user.save()) { // FAILS WITH ERROR BELOW // ... }
堆栈跟踪:
[ 16.09.2011 11:57:47.591] [http-bio-localhost/127.0.0.1-8080-exec-3] ERROR org.codehaus.groovy.grails.web.errors.GrailsExceptionResolver org.apache.commons.logging.impl.SLF4JLog Exception occurred when processing request: [GET] /user/enable/bc73701c-d280-4de0-8951-7af9f2a3d636 Stacktrace follows: org.postgresql.util.PSQLException: No value specified for parameter 1. at org.postgresql.core.v3.SimpleParameterList.checkAllParametersSet(SimpleParameterList.java:178) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:246) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:500) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) at org.apache.commons.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96) at myproj.UserService.enableUser(UserService.groovy:234) at myproj.UserController$_closure8.doCall(UserController.groovy:244) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:885) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907) at java.lang.Thread.run(Thread.java:619)
请注意,我可以在同一运行实例中创建其他用户-但是(到目前为止)该错误仅在该代码中发生。
关于如何解决这个问题的任何想法?
使用的版本:
(由于正在开发这些部分,可能是一个错误,但是我不确定。)
正如提到的JIRA问题中概述的那样,问题源于为映射类设置的唯一约束。
将唯一约束移到Mapping DC中解决了此问题。