1

Grails バージョン: 3.1.2

ドメイン オブジェクト (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 は必要ありません。おそらく、Spring がドメイン クラスの独自のインスタンスを作成しようとしているように見えますか? サービス Bean が作成されるまで、Spring がこれを行うのを防ぐ方法はありますか?

4

1 に答える 1

1

コンストラクターを使用する代わりに、beforeInsert()初期化に使用できますbusinessVersion

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)
    }
}
于 2016-03-24T20:31:16.713 に答える