我正在使用GORM为我将在多个Grails 2.2.3应用程序中使用的插件创建一些域类。出于某种原因,当我向学生域类添加一个Getter时,我收到一个BatchUpdateException,告诉我没有足够的权限进行更新。
编辑:请注意,我正在使用Oracle 11g数据库的ojdbc6-11.2.0.1.0驱动程序。
这是我的学生班:
class Student {
String sid
String firstName
String lastName
String middleInitial
String email
String ssn
static mapping = {
// Mappings and such
}
}
我正在添加这个Getter来“清理”我从数据库收到的中间初始值,它是否为null:
String getMiddleInitial() {
return this.middleInitial ?: ""
}
添加该行后,我导航到/$app_name/student/list
URL并获取以下错误/堆栈跟踪:
Error 500: Internal Server Error
URI
/appname/employee/list
Class
java.sql.BatchUpdateException
Message
ORA-01031: insufficient privileges
Trace
Line | Method
->> 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 918 | run in ''
^ 680 | run . . in java.lang.Thread
Caused by SQLGrammarException: Could not execute JDBC batch update
->> 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 918 | run in ''
^ 680 | run . . in java.lang.Thread
Caused by BatchUpdateException: ORA-01031: insufficient privileges
->> 10070 | executeBatch in oracle.jdbc.driver.OraclePreparedStatement
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
| 213 | executeBatch in oracle.jdbc.driver.OracleStatementWrapper
| 297 | executeBatch in org.apache.commons.dbcp.DelegatingStatement
| 895 | runTask in java.util.concurrent.ThreadPoolExecutor$Worker
| 918 | run . . in ''
^ 680 | run in java.lang.Thread
删除Getter后,列出数据库中的所有学生都可以正常工作。这对我没有任何意义,因为它不像我正在尝试更新或将对象保存到数据库。任何人都可以解释发生了什么以及如何解决它?
答案 0 :(得分:1)
检查dbCreate
中update
或create
是否设置为DataSource.groovy
?
如果存在,则删除或注释掉该条目。
//dbCreate = 'update' //or use as below
dbCreate = 'none'
答案 1 :(得分:0)
在每100行之后刷新会话时我遇到了类似的问题。我打开了SQL日志记录和hibernate日志记录。事实证明,grails会话正在尝试持久化会话中不必要的域对象。在刷新会话之前,我不得不使用domainObj.discard()丢弃该对象。然后这个错误就消失了。