2013-10-01 2 views
0

와 도메인 객체를 업데이트, 여기 내 데이터 구조의 관련 조각 그리고 제약Grails는이 - 도메인 객체에서 널 날짜

Date printed 

static constraints = 
{ 
    printed (Display:false, nullable:true)  
} 

을 차단하고 나는이 방법을 쓴

def resetPrinted() 
{ 
    printed = null 
    save() 
} 

이 메소드를 실행할 때 printed은 null이 아닌 현재 날짜로 설정됩니다.

이 문제에 관해 불평하는 사람들이 꽤 많지만 아직 실제 솔루션을 찾지 못했습니다. 여기에 지금까지 발견 한 내용은 다음과 같습니다 내가 Grails를 2.2.4을 사용하고

http://jira.grails.org/browse/GRAILS-6943

http://grails.1312388.n4.nabble.com/Grails-1-3-4-won-t-accept-null-dates-td2322178.html

http://java.dzone.com/tips/null-value-save-issue-grails

http://jira.grails.org/browse/GRAILS-7189

. 이것이 2.3.0에서 어떻게 든 고쳐 졌다면 업그레이드 하겠지만, 그렇지 않으면 차라리 업그레이드하지 않을 것입니다.

+0

그것은 2.2.4에서 콘솔을 통해 테스트 할 때 예상대로 작동합니다. 구현은 어떻게 생겼습니까? – dmahapatro

+0

dmahapatro, 맞아, 이건 정말 문제가 아니야. 나는'beforeUpdate()'메소드를 알아 차리지 못했고'printed' 메소드도 변경했다. 이 질문은 쓸모 없게되고 이후 독자에게 혼란을 줄 뿐이므로 삭제해야합니까? – howrad

+0

내가 직면하고 발견 한 (어떻게 그리고 왜'beforeUpdate()'가) 당신을 막고 있었는지에 대한 답변을 추가하고 답변을 수락하는 것이 좋습니다. – dmahapatro

답변

0

을 호출하는 beforeUpdate() 메서드가 있다는 것을 알지 못했습니다. 다음은 그 방법의 관련 부분은 다음과 같습니다

def setStatusDate() 
{ 
    def now = new Date() 
    ... 
    else if(status == Status.PRINTED) 
     printed = now 
    ... 
} 

그래서 resetPrinted()는 null로 설정했지만, 업데이트가 발생하기 직전, beforeUpdate()setStatusDate()라고하는 트리거 및 now로 다시 설정했다.

결론 : 데이터가 비스듬히가는 경우, 이러한 방법의 존재를 확인 : beforeInsert, beforeUpdate, beforeDelete, beforeValidate, afterInsert, afterUpdate, afterDelete,onLoad

관련 문제