我想缓存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();
}
无效
答案 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)进行缓存,但由于该列表可序列化但该列表元素不可,因此失败。