2012-01-16 14 views
1

私のアプリケーションをGrails 2.0にアップグレードしようとしていて、次の問題に直面しています。私はパブリックゲッターを持つプライベートドメイン属性を持っています。私は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にしようとしましたが、アプリケーションの複雑さのために他の多くの問題を受けました。それにもかかわらず、もし私が属性をパブリックにするなら、私は希望する機能を失うでしょう - >セッターを隠す。 – kuceram

答えて

1

ここで問題となるのは、自動的にドメインクラスのプロパティを有効にすることですフィールドを構成する必要はなく、フィールドはプロパティでなければなりません。つまり、同じタイプのパブリック・ゲッター/セッター・ペアを持つ必要があります。

パブリックフィールドを追加するときにGroovyがこれを行います。フィールドをプライベートにし、パブリックゲッターとセッターを作成します。しかし、すでにゲッターやセッターがあればそれはできませんし、もしそれらが共に公開されていなければ、プロパティは(JavaBeanの意味で)プロパティとみなされないので、フィールドは永続的ではありません。つまり、フィールドには照会できません。データベースに格納されたり更新されたりすることはありません。

0

数分の試験の後、私は問題が保護された設定者にあることを認識しました。私がセッターを公開すると、それは機能します。 Grailsのバグだと思われますので、grailsバグが発生しました。http://jira.grails.org/browse/GRAILS-8637

関連する問題