Spring 在自定义实体侦听器中捕获实体信息
我希望自定义实体侦听器为一些实体生成自动递增的别名 我实现了一个util类,以便为分布式环境中的实体生成自动递增的别名,如下所示: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
@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?你的数据库没有序列吗