2012-01-16 3 views
1

내 앱을 Grails 2.0으로 업그레이드하려고하는데 다음과 같은 문제가 있습니다. 공개 getter 개인 도메인 특성이 있습니다. createCriteria에서이 속성을 쿼리하고 싶습니다. 그리고 getter가 public 일지라도 "속성을 확인할 수 없습니다 ..."예외가 리턴됩니다. 나는 Jira 버그를 보았습니다 http://jira.grails.org/browse/GRAILS-8498?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel 그러나 여전히 작동하지 않습니다. Grails 1.3.7은 정상적으로 작동했습니다.Grails 2.0 CreateCriteria 개인 속성을 쿼리 할 수 ​​없습니다.

내 코드와 같은 것입니다 : 도메인 클래스

class MyClass { 
    protected boolean reserved = false 

    protected void setReserved(boolean reserved) { 
     this.reserved = reserved 
    } 

    public boolean getReserved() { 
     return this.reserved 
    } 
} 

쿼리

def c = MyClass.createCriteria() 
def results = c.list { 
    eq('reserved', true) 
} 

이 될 수있는 문제는 것 때문에 이름을 속성 '예약하기'Grails의에서 예약 된 키워드 된 것입니다 다른에 대한 그것이 작동하는 다른 이름의 속성 ...

+0

getter와 setter를 제거하면 작동합니다 (어쨌든 기본값보다 더 많은 것을 수행하지 않으므로). –

+0

이 코드의 주요 목적은이 속성 설정을 비활성화하는 것입니다. 읽을 수 있도록하십시오. getter를 제거하고 속성을 public으로 만들려고했지만 응용 프로그램의 복잡성 때문에 다른 많은 문제가 발생했습니다. 그럼에도 불구하고, 속성을 public으로 만들면 원하는 기능을 잃을 것입니다.> setter를 숨 깁니다. – kuceram

답변

1

여기서 문제는 자동으로 도메인 클래스 속성을 사용 가능하게하는 것입니다 필드를 구성하지 않고도 지속적이어야합니다. 필드는 속성이어야합니다. 즉, 동일한 유형의 공용 getter/setter 쌍이 있어야합니다.

Groovy는 공용 필드를 추가 할 때이 작업을 수행합니다. 필드를 비공개로 설정하고 공용 getter 및 setter를 만듭니다. 그러나 getter 나 setter가 이미있는 경우에는 그렇게하지 않으며 둘 다 public이 아닌 경우 JavaBean이라는 의미의 속성으로 간주되지 않으므로 필드가 지속되지 않습니다. 따라서 필드가 질의 할 수 없다는 것 이상입니다. 데이터베이스에 저장되거나 업데이트되지 않습니다.

0

몇 분의 시험 후에, 나는 문제가 보호받는 세터에 있다는 것을 깨달았다. 세터를 공개로 설정하면 작동합니다. Grails 버그 인 것 같아서 grails 버그가 생겼습니다. http : //jira.grails.org/browse/GRAILS-8637

관련 문제