2017-11-25 7 views
0

에 저장되지 않은 내가 저장해야 개체의 목록을 가지고, 나는이 기능GORM 저장()가 DB

private saveAll(List<Element> elements){ 
    for(Element element: elements){ 
     element.save(flush:true, insert:true) 
    } 
} 

에게이 I 요소 클래스 (그루비 클래스)는 다음과 같다 :

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 찾을 : 모든에

@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; 
    } 

} 

나는 다음과 같은 로그를 얻을 저장 삽입이 전혀 반영되지 않습니다. 오류가 발생하지 않거나 데이터가 데이터베이스에 저장되지 않은 이유를 이해할 수 없습니다.

코드에 문제가 있는지 확인하십시오 (Groovy/grails newbie) 또는 가이드 왜 이런 행동이 일어날까요?

+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)를 추가하여 트랜잭션 선언을 제거하고 그 할 것입니다 있는지 확인 차이.