HazelcastSerializationException: не удалось сериализовать проекции на основе интерфейса - PullRequest
0 голосов
/ 04 марта 2019

Я хочу кэшировать результат Interface-based Projections, но я получил эту ошибку

Причина: com.hazelcast.nio.serialization.HazelcastSerializationException: Не удалось сериализовать 'java.util.ArrayList'

@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();

    }

кажется расширяется Serializable не работает

1 Ответ

0 голосов
/ 05 марта 2019

Это проблема Spring, скрытая в недрах:

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 того, что выget back - это список ( сериализуемый ) прокси-классов ( не сериализуемый ).При @Cacheable список отправляется в распределенное хранилище (Hazelcast) для кэширования, и это не удается, поскольку список сериализуем, а элементы списка - нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...