HazelcastSerializationException:无法序列化基于接口的投影

时间:2019-03-04 15:34:11

标签: java spring-data-jpa hazelcast projection

我想缓存NA的结果 但是我遇到了这个错误

  

原因:   com.hazelcast.nio.serialization.HazelcastSerializationException:   无法序列化'java.util.ArrayList'

Interface-based Projections

似乎扩展@Repository public interface CustomerRepository extends JpaRepository<CustomerRepository, Long> { @Cacheable(value = "customer") @Query("select c.first_name as firstName from customer where customer_id in :customerId") List<NamesOnly> findByCustomerId( @Param("customerId") List<String> customerId); } public interface NamesOnly extends Serializable { String getCustomerFirstName(); } 无效

1 个答案:

答案 0 :(得分:1)

这是一个春季问题,埋在深处是这样的:

java.io.NotSerializableException: org.springframework.data.projection.DefaultMethodInvokingMethodInterceptor

可能是this

的另一种情况

作为解决方法,您可以更改

List<NamesOnly> findByCustomerId( @Param("customerId") List<String> customerId);

List<String> findByCustomerId( @Param("customerId") List<String> customerId);

因为您的投影仅返回单列firstName,该列大概是字符串。

在没有@Cacheable的情况下,您得到的是代理类(不可序列化)的列表(可序列化)。 使用@Cacheable时,该列表将发送到分布式存储(Hazelcast)进行缓存,但由于该列表可序列化但该列表元素不可,因此失败。