1

更新しました:

grails 2.0 をインストールしました。 ApplicationConfiguration と City の 2 つのドメイン クラスがあります。ApplicationConfiguration
はデフォルト フィールドとその値を格納します。City は ApplicationConfiguration 値にアクセスします。

class ApplicationConfiguration {
    String myDefaultField
    String value

    static getMyDefaultCity(){
        def city_id  =  ApplicationConfiguration.findByMyDefaultField('city') .id
        def  cityName = ApplicationConfiguration.get(city_id ).value
    } 
}


Class City{
    def ApplicationConfiguration
    String city = ApplicationConfiguration.getMyDefaultCity()
}

基本的に、1) executeQuery() 2) find*() などのドメインおよびサービスから GORM メソッドにアクセスできません。

そして、私は以下のようなエラーを受け取ります

  ... 5 more
Caused by: org.hibernate.InstantiationException: could not instantiate test objectCity
        ... 5 more
Caused by: java.lang.reflect.InvocationTargetException
        ... 5 more
Caused by: groovy.lang.MissingMethodException: No signature of method: ApplicationConfiguration.findByMyDefaultFie
ld() is applicable for argument types: (java.lang.String) values: [city]
        at ApplicationConfiguration.getMyDefaultCity(ApplicationConfiguration.groovy:63)
        at City.<init>(City.groovy:28)

そして、コントローラーで行うApplicationConfiguration.findByMyDefaultField('city')と正常に動作し、コントローラーでGORMメソッドにアクセスできます

バグを再現するテストケースは

1) Create a project using grails project wizard
2) Create two domain classes ApplicationConfiguration(String myDefaultField, String value) and City(String city) 
3) Do generate-all for  ApplicationConfiguration
4) Now add this "getMyDefaultCity()" with the definition method as shown above
5) Initialize the filed city in City domain class "String city = ApplicationConfiguration.getMyDefaultCity()"
6) Restart the application 
4

1 に答える 1

0

おそらく、この質問はあなたに役立つかもしれません:ゲッタースタイルのメソッド名を使用してドメインクラスにビジネスロジックを追加する

メソッドに一時的な宣言を使用しましたか?

于 2012-07-23T15:50:33.367 に答える