【发布时间】:2012-02-08 06:10:24
【问题描述】:
我使用 oracle11g 作为数据库,并尝试从我的 grails 服务类中插入到 globalusers 表中。 我正在像这样在 grails 服务中检索数据源:
import org.codehaus.groovy.grails.commons.ApplicationHolder as AH
class UserImportService {
def dataSource = AH.application.mainContext.dataSource
def sql = new Sql(dataSource) ;
String insertQuery="insert into GLOBALUSERS (..) values (..)
try{
sql.execute(insertQuery)
}
catch(Exception e){
println "Failed to insert : " +insertQuery
println "Exception is:" + e;
}
}
当我从前端运行服务时,我得到 sql 异常提示
Exception is:java.sql.SQLIntegrityConstraintViolationException: ORA-01400: cannot insert NULL into ("GRA"."GLOBALUSERS"."ID")
由于我正在使用带有处理 ID 生成和自动增量的自定义方言的数据源,这应该由 grail/hibernate 处理。
当使用来自其他 UI 的相同数据源时..一个接一个..它可以工作..所以方言工作正常。但是这个批量更新服务不起作用。
【问题讨论】:
-
与您的问题无关 - 如果这是
grails-app/services中的服务,您正在做太多工作才能获得dataSourcebean。您可以跳过 applicationholder 位,只使用def dataSource,因为您可以使用def <beanname>将任何 Spring bean 注入服务(或其他工件)。 -
嗨...是的,我阅读了您的文章...但是在我的控制器中,我正在调用 new service() ...在更改它时总体会发生什么变化?以及与问题相关的内容...我是否必须坚持使用域类仅用于使用休眠的自动 id 生成,如果是,我如何以最快的方式在 globalusers 域类中设置 72 个字段..如果没有,我该怎么做我的代码适用于所有数据库?
标签: hibernate grails groovy datasource