Если у меня есть следующий объект, который я храню в Redis как Hash
@RedisHash("animals")
public class Animal implements Serializable {
private static final long serialVersionUID = 5905326889964459171L;
@Id
private String id;
@Indexed
private String type;
@Indexed
private String location;
Если 1000 записей в smembers animals:type:animal01
и я хочу - «Найти животных типа животных01 во всех местах», тогда я делаю -
Set<String> members = stringRedisTemplate.opsForHash().members("animals:type:animal01");
List<Object> result = stringRedisTemplate.executePipelined(new RedisCallback<Object>() {
@Override
public Object doInRedis(RedisConnection connection) throws DataAccessException {
for (String member : members) {
connection.hGetAll(String.format("animals:%s", member).getBytes());
}
return null;
}
});
Каждый объект в «результате» имеет тип LinkedHashMap. Я пытался использовать org.springframework.data.redis.hash.ObjectHashMapper
для преобразования этого в Animal, но, похоже, ObjectHashMapper работает только с Map. Я не мог заставить его работать с картой
(я использую spring-boot-starter-data-redis 1.5.14.RELEASE, в которую входит jedis2.9.0)
Как десериализовать конвейерные результаты?