【发布时间】:2023-03-15 11:53:01
【问题描述】:
我有一个使用 spring-data-hazelcast 2.4.0 的 Spring Boot 项目。这是一个非常好的库,提供 HazelcastRepository,它抽象了标准 Spring Data Repository 范例背后的 hazelcast 交互。但是我在尝试对对象中的列表字段进行可分页查询时遇到了以下问题:
我有这个对象:
@Data
@KeySpace
public class Book implements Serializable {
@Id
private Long id;
private String author;
private List<String> categories;
}
我想使用 HazelcastRepository 对列表字段执行可分页查询。我可以使用下面的 org.springframework.data.hazelcast.repository.query.Query 注释在列表中查询,它工作正常:
@Query("categories[any] = %s")
Iterable<Book> findByCategory(String category);
但是当我尝试用这种方法返回一个页面时:
@Query("categories[any] = %s")
Page<Book> findByCategory(String category, Pageable pageable);
我得到以下异常: java.lang.ClassCastException: com.hazelcast.map.impl.query.QueryResultCollection 与 org.springframework.data.domain.Page 不兼容
作为替代方案,我尝试使用派生查询方法,例如:
Page<Book> findByCategories(String category, Pageable pageable);
但这会引发此异常: java.lang.IllegalArgumentException: 不能将 EqualPredicate 谓词与数组或集合属性一起使用
有没有办法在列表属性中结合搜索并使用 HazelcastRepository 返回页面结果?
【问题讨论】:
标签: spring-boot spring-data hazelcast