2011-03-22 1 views
6

나는 사람 (People)이라는 Grails 도메인을 가지고 있으며 각 사람들이 자식을 가지고 있는지 확인하고 싶습니다. 차일 즈는 다른 People 객체입니다. 여기에 내 도메인 구조입니다 :Grails 도메인의 임시 속성

class People implements Serializable { 

    static constraints = { 
     name (nullable : false, unique : true) 
     createdBy (nullable : false) 
     creationDate (nullable : false) 
    } 

    static transients = ['hasChild'] 

    static mapping = { 
     table 'PEOPLE' 
     id generator: 'sequence', params : [sequence : 'SEQ_PK_ID'] 
     columns { 
      id column : 'APEOPLE_ID' 
      parentPeople column : 'PARENT_PEOPLE_ID' 
     } 
     parentPeople lazy : false 
    } 

    People parentPeople 
    String name 
    String description 

    Boolean hasChild() { 
     def childPeoples = People.createCriteria().count { 
      eq ('parentPeople', People) 
     } 
     return (childPeoples > 0) 
    } 
} 

그러나 나는 어디에서 people.hasChild()를 호출 할 수 없습니다. 이걸 좀 도와 주실 래요? 정말 고맙습니다!

답변

4

eq ('parentPeople', People)에서 Grails는 "인물"(클래스)을 이해할 수 없습니다. "People"을 this으로 대체해야합니다. 예 :

static transients = ["children"] 

    def getChildren() { 
     def childPeoples = People.findAllByParentPeople(this, [sort:'id',order:'asc']) 
    } 
+0

당신은뿐만 아니라 세터을 수행 할 수 있습니다

이 같은 시도? –

0

다른 결과는 Named Queries입니다. 그것은 더 간결 해 보이고 특별히이 목적을 위해 만들어졌습니다. 또한 도메인 모델에서 정적 선언의 패턴에 맞고 본질적으로 필자가 응용 프로그램에서 사용하는 기준이기 때문에 필자도 좋아합니다. 임시 선언문을 선언 한 후 클로저를 작성하면 명명 된 쿼리를 선언 할 때 약간의 문제가 발생할 수 있습니다. 단지 제 의견입니다.

static namedQueries = { 
    getChildren { 
     projections { 
      count "parentPeople" 
     } 
    } 
}