【发布时间】:2017-11-25 14:43:33
【问题描述】:
我有一个需要保存的对象列表,我有这个功能
private saveAll(List<Element> elements){
for(Element element: elements){
element.save(flush:true, insert:true)
}
}
我的元素类(groovy类)如下:
@ToString(excludes = 'metaClass,content', includePackage = false, includeNames = false)
class Element {
Integer id
MessageSourceType sourceType
String key
String valueEN
String valueDE
String valueES
String valueFR
String valueIT
String valuePT
String valueAR
String valueCMN
String valueHI
String valuePL
static constraints = {
sourceType nullable: false, blank: false, maxSize: 256
key nullable: false, blank: false, maxSize: 254, unique:true
valueEN nullable: true, maxSize: 64000
valueDE nullable: true, maxSize: 64000
valueES nullable: true, maxSize: 64000
valueFR nullable: true, maxSize: 64000
valueIT nullable: true, maxSize: 64000
valuePT nullable: true, maxSize: 64000
valueAR nullable: true, maxSize: 64000
valueCMN nullable: true, maxSize: 64000
valueHI nullable: true, maxSize: 64000
valuePL nullable: true, maxSize: 64000
}
static mapping = {
table "element"
id column: "eId"
version column: "eVersion"
sourceType column: "eSourceType"
valueEN column: "eValueEN"
valueDE column: "eValueDE"
valueES column: "eValueES"
valueFR column: "eValueFR"
valueIT column: "eValueIT"
valuePT column: "eValuePT"
valueAR column: "eValueAR"
valueCMN column: "eValueCMN"
valueHI column: "eValueHI"
valuePL column: "eValuePL"
}
@Override
public boolean equals(Object element){
if(element != null && element instanceof Element){
if(this.getKey().equalsIgnoreCase(((Element)element).getKey())){
return true;
}
}
return false;
}
}
在每次保存时,我都会收到以下日志:
2017-11-25 16:38:56,787 | TRACE | | localhost-startStop-1 | org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor | executing insertions
2017-11-25 16:38:56,787 | DEBUG | | localhost-startStop-1 | org.codehaus.groovy.grails.orm.hibernate.support.ClosureEventTriggeringInterceptor | executing identity-insert immediately
但是当我检查数据库中的表时,我发现它是空的,没有反映任何插入。我不明白为什么不会引发错误,或者为什么数据没有保存在数据库中
您能否检查我的代码是否有任何问题(我是 groovy/grails 新手)或指导我为什么会发生这样的行为?
【问题讨论】:
-
发生这种情况的原因有很多。一种是稍后将事务回滚。验证可能会失败(您可以通过在调用
.save(...)时包含failOnError: true来排除这种情况。 -
@JeffScottBrown 我已将 failOnError 设置为 true 并作为属性添加到 save 方法,但没有记录错误!
-
failOnError不一定会导致记录任何内容,但如果没有引发表明验证没有失败的异常。如果没有看到示例项目,可能很难回答您的问题。正如我之前所说,数据可能无法保存的原因有很多,而仅element.save(flush:true, insert:true)不足以诊断问题。抱歉,我帮不上忙。祝你好运!
标签: hibernate grails grails-orm