diff --git a/src/main/java/org/springframework/data/redis/core/RedisTemplate.java b/src/main/java/org/springframework/data/redis/core/RedisTemplate.java index 7a9dcb9ade..d283b391fc 100644 --- a/src/main/java/org/springframework/data/redis/core/RedisTemplate.java +++ b/src/main/java/org/springframework/data/redis/core/RedisTemplate.java @@ -273,7 +273,7 @@ public List doInRedis(RedisConnection connection) throws DataAccessExcep } List closePipeline = connection.closePipeline(); pipelinedClosed = true; - return deserializeMixedResults(closePipeline, resultSerializer, resultSerializer, resultSerializer); + return deserializeMixedResults(closePipeline, resultSerializer, hashKeySerializer, hashValueSerializer); } finally { if (!pipelinedClosed) { connection.closePipeline(); diff --git a/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java b/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java index 5df2daa3d2..dad2619010 100644 --- a/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java +++ b/src/test/java/org/springframework/data/redis/core/RedisTemplateTests.java @@ -51,6 +51,7 @@ import org.springframework.data.redis.connection.DataType; import org.springframework.data.redis.connection.RedisConnection; import org.springframework.data.redis.connection.StringRedisConnection; +import org.springframework.data.redis.connection.jedis.JedisClusterConnection; import org.springframework.data.redis.connection.jedis.JedisConnectionFactory; import org.springframework.data.redis.connection.jredis.JredisConnectionFactory; import org.springframework.data.redis.connection.srp.SrpConnectionFactory; @@ -314,6 +315,22 @@ public Object doInRedis(RedisConnection connection) throws DataAccessException { assertEquals(Arrays.asList(new Object[] { 5l, 1l, 2l, Arrays.asList(new Long[] { 10l, 11l }) }), results); } + @Test + public void testExecutePipelinedWidthDifferentHashKeySerializerAndHashValueSerializer() { + assumeTrue(redisTemplate instanceof StringRedisTemplate); + redisTemplate.setKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashKeySerializer(new StringRedisSerializer()); + redisTemplate.setHashValueSerializer(new GenericToStringSerializer(Long.class)); + redisTemplate.opsForHash().put((K) "foo", "key", 1L); + List results = redisTemplate.executePipelined(new RedisCallback() { + public Object doInRedis(RedisConnection connection) throws DataAccessException { + connection.hGetAll(((StringRedisSerializer) redisTemplate.getKeySerializer()).serialize("foo")); + return null; + } + }); + assertEquals(((Map) results.get(0)).get("key"), 1L); + } + @Test(expected = InvalidDataAccessApiUsageException.class) public void testExecutePipelinedNonNullRedisCallback() { redisTemplate.executePipelined(new RedisCallback() {