SDN BeforeSaveEvent <T> захватывает события перед сохранением сущностей! = T

В настоящее время я централизовалId создание каждого NodeEntity в событии приложения BeforeSave. Что-то вроде того:

   @Inject
   IdentifierFactory identifierFactory;

   @Bean
   ApplicationListener<BeforeSaveEvent> beforeSaveEventApplicationListener() {
      return new ApplicationListener<BeforeSaveEvent>() {
         @Override
         public void onApplicationEvent(BeforeSaveEvent event) {
            if (event.getEntity() instanceof IdentifiableEntity) {
               IdentifiableEntity entity = (IdentifiableEntity) event.getEntity();
               if (entity.getId() == null) entity.setId(identifierFactory.generateId());
            }
         }
      };

Это отлично работает.

Однако в моей графовой модели у меня есть идентифицируемые сущности (с атрибутом id,IdentififableEntity интерфейс) и другие неидентифицируемые. То, что я пытаюсь сделать, это захват события перед сохранением, только если сущность идентифицируема, чтобы избежать instanceof / casting:

if (event.getEntity() instanceof IdentifiableEntity)
IdentifiableEntity entity = (IdentifiableEntity) event.getEntity();

Я попробовал следующее, но это не работает (событие сохранения перед продолжением захвата неидентифицируемых объектов):

   @Bean
   ApplicationListener<BeforeSaveEvent<IdentifiableEntity>> beforeSaveEventApplicationListener() {
      return new ApplicationListener<BeforeSaveEvent<IdentifiableEntity>>() {
         @Override
         public void onApplicationEvent(BeforeSaveEvent<IdentifiableEntity> event) {
       ,     if (event.getEntity() == null) event.getEntity().setId(identifierFactory.generateId());
         }
      };
   }

Я не совсем уверен, смогу ли я сделать это. Я также попытался указать конкретныйclass (напримерBeforeSaveEvent<User>) вместоinterface и у меня та же проблема, событие также захватывает другие объекты! =User.

Может кто-нибудь уточнить, если то, что я пытаюсь сделать, возможно сspring-data-neo4j (версия3.3.0.RELEASE) и если да, то пример того, как можно это сделать.

Заранее спасибо.

Ответы на вопрос(0)

Ваш ответ на вопрос