Spring 在自定义实体侦听器中捕获实体信息

Spring 在自定义实体侦听器中捕获实体信息,spring,spring-boot,hibernate,jpa,entitylisteners,Spring,Spring Boot,Hibernate,Jpa,Entitylisteners,我希望自定义实体侦听器为一些实体生成自动递增的别名 我实现了一个util类,以便为分布式环境中的实体生成自动递增的别名,如下所示: @Component public class AutoIncrementingIdGenerationUtil { private final RedisTemplate<String, Object> redisTemplate; public AutoIncrementingIdGenerationUtil( RedisTe

我希望自定义实体侦听器为一些实体生成自动递增的别名

我实现了一个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());
  }
}
@组件
公共类自动递增IDGenerationUtil{
私有最终再贴现模板;
公共自动递增IDGenerationUtil(
再贴现模板(再贴现模板){
this.redisTemplate=redisTemplate;
}
公共字符串getNextSequenceNumber(字符串键名){
RedisAtomicLong计数器=新的RedisAtomicLong(关键字名称,
requirennull(redisTemplate.getConnectionFactory());
返回计数器.incrementAndGet();
}
}
现在,我的应用程序中有几个实体,对于其中几个实体,我想生成别名

因此,我正在编写自己的自定义实体侦听器,如下所示:

@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());
  }
}
@组件
公共类CustomEntityListener{
私有最终自动递增IDGenerationUtil自动递增IDGenerationUtil;
公共CustomEntityListener(
自动递增IDGenerationUtil自动递增IDGenerationUtil){
this.autoIncrementingIdGenerationUtil=autoIncrementingIdGenerationUtil;
}
@预科生

void onPrePersist(对象实体){实体侦听器无法参数化。只需使用
setAlias()
方法使相关实体实现一个接口,例如
Aliased
。然后您将有一个类型可强制转换

还有,为什么要使用Redis?你的数据库没有序列吗