SDN BeforeSaveEvent <t>在保存实体之前捕获事件!= T.

时间:2015-05-07 16:28:22

标签: java neo4j spring-data spring-data-neo4j

目前,我已将每个NodeEntity的Id创建集中在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接口)和其他不可识别的实体。我想要做的是只有当实体是可识别的时才捕获之前的保存事件,以避免实例/铸造:

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而我遇到了同样的问题,该事件还捕获了其他实体!= {{1} }。

任何人都可以澄清我是否可以使用User(版本spring-data-neo4j)进行尝试,如果可以的话,可以举例说明如何做到这一点。

提前致谢。

0 个答案:

没有答案