2017-11-25 203 views
0

節省我有我需要保存對象的列表,我有這個功能GORM保存()在Grails是不是在DB

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 

但後來當我在DB檢查表我覺得EMP ty,沒有反映插入。我不明白爲什麼不會出現錯誤,或者爲什麼數據沒有保存在數據庫中

您可以檢查我的代碼是否存在任何問題(我是groovy/grails新手)或指南我爲什麼會發生這樣的行爲?

+2

這可能會發生任何原因。其中之一就是稍後有事情要回來。驗證可能失敗(你可以通過在調用'.save(...)'時加入'failOnError:true'來排除這個錯誤。 –

+0

@JeffScottBrown我已經將failOnError設置爲true並將其添加爲save方法的屬性,但是沒有錯誤記錄! –

+0

'failOnError'不一定會導致任何事情被記錄,但如果沒有異常被拋出,表明驗證沒有失敗。沒有看到一個示例項目,可能很難回答你的問題。之前,有很多原因可能導致數據不能保存,只是'element.save(flush:true,insert:true)'不足以診斷問題,抱歉我無法幫助。祝您好運! –

回答

0

試試這個,看看你得到任何類型的錯誤:

private saveAll(List<Element> elements){ 
    for(Element element: elements){ 
     element.validate() 
     if (element.hasErrors()) { 
      element.errors.allErrors.each { 
       println it 
      } 
     } else { 
      element.save(flush: true) 
     } 
    } 
} 

而且,如果白水從服務調用,通過添加靜態屬性(static transactional=false)刪除事務聲明,看看是否會令一個區別。