2014-11-20 2 views
0

이 오류가 발생합니다 : null 객체에 'id'속성을 가져올 수 없으며 문제를 이해할 수 없습니다.Grails null 객체에 'id'속성을 가져올 수 없습니다.

여기

CreateCriteria 하나 개의 요소를 반환 provionController.groovy

에 내 코드, 난, 데이터베이스의 크기 = 1을 확인하지만 난이 아이디를 표시하려고 할 때,이 오류가 발생합니다.

def prov_model = null 
def model = Provision_model.CreateCriteria{ 
    gilt_air{ 
     eq("air",air) 
    } 
    gilt_coo{ 
     eq("coo",coo) 
    } 
    le("date_from", per.begin) 
    ge("date_to", per.end) 
    eq("active", 1) 

} 
println(model.size()) 
prov_model = model[0] 
println(prov_model.id) 

하지만 get() 메소드에 의해 직접 얻고 때, 그것은

prov_model = Provision_model.get(57) 
println(prov_model.id) 
+1

이들은 매우 비 전형적인 도메인 클래스 및 속성 이름입니다. Groovy/Grails/Java 규약에 따라 클래스 이름을'ProvisionModel'으로, 속성 이름을'dateFrom' –

답변

3

1 아무 문제가되지 없습니다 : 방법이 createCriteria()라고하지 CreateCriteria()

2를 다음 메소드 자체는 db 조작을 호출하지 않습니다. 당신은 쿼리

0

쿼리를 실행하고 model에 결과를 저장하기 위해 만약 결과 얻을 그것을 list() 또는 get() 등을 호출해야,이

def model = Provision_model.CreateCriteria 

로 교체

def model = Provision_model.withCriteria 
+0

해 주셔서 감사합니다. 답변을 주셔서 감사합니다. withCriteria로 수정 했는데도 같은 오류가 계속 발생합니다! – nayomi

0

@injecteer와 @Donal은 모두 매우 유효한 입력을가집니다. 첫째, 당신은 여기에 기준을 포맷하는 방법 중 하나의 예입니다, 구문 문제를 해결해야합니다

def prov_model = null 
def model = Provision_model.createCriteria().get() { 
    gilt_air{ 
     eq("air",air) 
    } 
    gilt_coo{ 
     eq("coo",coo) 
    } 
    le("date_from", per.begin) 
    ge("date_to", per.end) 
    eq("active", 1) 
} 

.get()를 사용하여 당신이 하나 개의 레코드에 대한 기준의 반환을 제한하고 있음을 유의하십시오. 둘째, withCriteria를 사용하고 위의 형식을 사용하여 두 가지 방법으로 조건을 작성하려고해도 여전히 작동하지 않으면 문제는 도메인 모델 또는 데이터베이스 구성에있을 수 있습니다.

관련 문제