Я хотел бы, чтобы пользовательский прослушиватель сущностей генерировал автоматически увеличиваемый псевдоним для нескольких сущностей.
Я реализовал один класс util, чтобы сгенерировать автоматически увеличивающийся псевдоним для сущностей в распределенной среде следующим образом:
@Component
public class AutoIncrementingIdGenerationUtil {
private final RedisTemplate<String, Object> redisTemplate;
public AutoIncrementingIdGenerationUtil(
RedisTemplate<String, Object> redisTemplate) {
this.redisTemplate = redisTemplate;
}
public String getNextSequenceNumber(String keyName) {
RedisAtomicLong counter = new RedisAtomicLong(keyName,
Objects.requireNonNull(redisTemplate.getConnectionFactory()));
return counter.incrementAndGet();
}
}
Теперь у меня есть несколько объектов в моем приложении, для НЕСКОЛЬКИХ СУЩЕСТВ я хотел бы создать псевдоним.
Итак, я пишу свой собственный прослушиватель сущностей следующим образом:
@Component
public class CustomEntityListener<T> {
private final AutoIncrementingIdGenerationUtil autoIncrementingIdGenerationUtil;
public CustomEntityListener(
AutoIncrementingIdGenerationUtil autoIncrementingIdGenerationUtil) {
this.autoIncrementingIdGenerationUtil = autoIncrementingIdGenerationUtil;
}
@PrePersist
void onPrePersist(Object entity) { <----HERE I WOULD LIKE TO CAST TO CONCRETE ENTITY TYPE,
if(StringUtils.isBlank(entity.getAlias())) {
entity.setAlias(autoIncrementingIdgenerationUtil.getNextSequenceNumber(entity.getEntityType());
}
}
Как упоминалось выше, все объекты не имеют атрибута псевдонима. Я не получаю правильного представления о том, как это сделать. Одна плохая идея — использовать getTEntityype()
. Но в этом случае было бы слишком много if-else и соответственно приведение типов, что будет выглядеть не очень хорошо. Любая лучшая идея относительно того, как это сделать?
Другой связанный вопрос в том же контексте: если у меня уже есть объект, имеющий функцию @PrePersist, будет ли функция, определенная в прослушивателе объектов, переопределять это, ИЛИ будут ли они оба работать?