2016-03-24 3 views
1

Grailsバージョン:3.1.2ドメインオブジェクトコンストラクタでgrailsサービスを呼び出せますか?

ドメインオブジェクト(VersionedDomainClass)の新しいインスタンスを作成するたびに呼び出すバージョン管理サービス(VersionService)があります。私はVersionedDomainClassがサービスを呼び出す対処したいと思いますが、私はこれを行うにしようとすると:

class VersionedDomainClass { 

    transient def versionService 

    short businessVersion 

    VersionedDomainClass() { 
     this.businessVersion = versionService.getNextVersion(this.class) 
    } 

} 

コンストラクタが起動時に呼び出される、versionServiceはまだnullで、その時点で私はNPEを取得:

Caused by: java.lang.NullPointerException: Cannot invoke method getNextVersion() on null object 

起動時にインスタンス化されたVersionedDomainClassは必要ありません。それは春がそれはおそらくドメインクラスの独自のisntanceを作成しようとしているように見えますか? Service Beansが作成されるまでSpringがこれをやらないようにする方法はありますか?

代わりにコンストラクタを使用しての、あなたが businessVersionを初期化するために beforeInsert()を使用することができます

答えて

1

class VersionedDomainClass { 

    transient def versionService 

    short businessVersion 

    /* 
    * I get called only once; 
    * right before I'm saved in the db for the first time. 
    */ 
    def beforeInsert() { 
     businessVersion = versionService.getNextVersion(this.class) 
    } 
} 
+0

ビンゴです!ありがとう。 –

関連する問題