2016-03-24 3 views
1

Версия Grails: 3.1.2Можно ли вызвать службу grails в конструкторе объекта домена?

У меня есть служба управления версиями (VersionService), которую я бы хотел вызвать, когда создаю новый экземпляр объекта домена (VersionedDomainClass). Я хотел бы VersionedDomainClass обрабатывать вызов службы, но когда я пытаюсь сделать это:

class VersionedDomainClass { 

    transient def versionService 

    short businessVersion 

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

} 

конструктор вызывается при запуске, в какой момент versionService еще нулевой, так что я получаю NPE:

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

Мне не нужен какой-либо VersionedDomainClass, созданный при запуске; похоже, что Spring пытается создать собственный isntance класса домена, возможно? есть ли способ предотвратить Spring от этого, пока не будут созданы Сервисные бобы?

ответ

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) 
    } 
} 
+0

Это лото! Благодарю. –

Смежные вопросы