I have a problem with Redis Cash. When I try call method getById
I get:
Action.handleValidationException.error validate exception:
org.springframework.data.redis.serializer.SerializationException: Cannot serialize
Each of my entities extends BaseEntity
. And all DTO entities are records. Every entity implements Serializable
.
How to fix this problem?
@Getter
@Setter
@MappedSuperclass
public abstract class BaseEntity implements Serializable {
@Serial
private static final long serialVersionUID = 0;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(nullable = false)
private Long id;
@CreationTimestamp
@Column(updatable = false)
private LocalDateTime createdAt;
@UpdateTimestamp
private LocalDateTime updatedAt;
}
@Service
@RequiredArgsConstructor
@Slf4j
@EnableCaching
public class UniversityServiceImpl implements UniversityService {
private final UniversityRepository universityRepository;
private final UniversityMapper universityMapper;
@Override
@Cacheable(value = "getById",key = "#id")
public UniversityResponseDTO getById(Long id, String lang) {
log.info("Action.getById.start");
University university = universityRepository.getById(id);
log.info("Action.getById.end");
return universityMapper.toUniversityResponseDTO(university, lang);
}
}
@Configuration
@EnableRedisRepositories
public class RedisConfiguration {
@Value("${redis.host}")
private String host;
@Bean
public JedisConnectionFactory redisConnectionFactory() {
RedisStandaloneConfiguration config = new RedisStandaloneConfiguration(host, 6379);
return new JedisConnectionFactory(config);
}
@Bean
public RedisTemplate<?, ?> redisTemplate(RedisConnectionFactory redisConnectionFactory) {
RedisTemplate<byte[], byte[]> template = new RedisTemplate<>();
template.setConnectionFactory(redisConnectionFactory);
return template;
}
}