目前,我已将每个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
)进行尝试,如果可以的话,可以举例说明如何做到这一点。
提前致谢。