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
) и если да, то пример того, как можно это сделать.
Заранее спасибо.