diff --git a/pom.xml b/pom.xml
index aca362db188..89718426dce 100644
--- a/pom.xml
+++ b/pom.xml
@@ -128,7 +128,7 @@
org.apache.ibatis.*
3.1.1
org.apache.ibatis.*;version=${project.version};-noimport:=true
- !ognl,net.sf.cglib.*;resolution:=optional,javassist.*;resolution:=optional,org.apache.commons.logging.*;resolution:=optional,org.apache.log4j.*;resolution:=optional,org.slf4j.*;resolution:=optional,org.apache.logging.log4j.*;resolution:=optional,*
+ org.apache.commons.lang3.builder;version="3.2.1",!ognl,net.sf.cglib.*;resolution:=optional,javassist.*;resolution:=optional,org.apache.commons.logging.*;resolution:=optional,org.apache.log4j.*;resolution:=optional,org.slf4j.*;resolution:=optional,org.apache.logging.log4j.*;resolution:=optional,*
*
1.6
1.6
@@ -172,6 +172,11 @@
1.1.1
true
+
+ org.apache.commons
+ commons-lang3
+ 3.2.1
+
org.javassist
javassist
diff --git a/src/main/java/org/apache/ibatis/cache/CacheKey.java b/src/main/java/org/apache/ibatis/cache/CacheKey.java
index 0b0e80e9131..ff0b334b446 100644
--- a/src/main/java/org/apache/ibatis/cache/CacheKey.java
+++ b/src/main/java/org/apache/ibatis/cache/CacheKey.java
@@ -15,6 +15,9 @@
*/
package org.apache.ibatis.cache;
+import org.apache.commons.lang3.builder.EqualsBuilder;
+import org.apache.commons.lang3.builder.HashCodeBuilder;
+
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
@@ -51,7 +54,7 @@ public int getUpdateCount() {
}
public void update(Object object) {
- int baseHashCode = object == null ? 1 : object.hashCode();
+ int baseHashCode = new HashCodeBuilder().append(object).toHashCode();
count++;
checksum += baseHashCode;
@@ -81,10 +84,12 @@ public boolean equals(Object object) {
for (int i = 0; i < updateList.size(); i++) {
Object thisObject = updateList.get(i);
Object thatObject = cacheKey.updateList.get(i);
- if (thisObject == null) {
- if (thatObject != null) return false;
- } else {
- if (!thisObject.equals(thatObject)) return false;
+
+ EqualsBuilder equalsBuilder = new EqualsBuilder();
+ equalsBuilder.append(thisObject, thatObject);
+
+ if (!equalsBuilder.isEquals()) {
+ return false;
}
}
return true;
diff --git a/src/test/java/org/apache/ibatis/cache/CacheKeyTest.java b/src/test/java/org/apache/ibatis/cache/CacheKeyTest.java
index 8afde1df0d8..b0a0344ec7b 100644
--- a/src/test/java/org/apache/ibatis/cache/CacheKeyTest.java
+++ b/src/test/java/org/apache/ibatis/cache/CacheKeyTest.java
@@ -71,4 +71,12 @@ public void shouldDemonstrateEmptyAndNullKeysAreEqual() {
assertEquals(key2, key1);
}
+ @Test
+ public void shouldTestCacheKeysWithBinaryArrays() throws Exception {
+ byte[] array1 = new byte[]{1};
+ byte[] array2 = new byte[]{1};
+ CacheKey key1 = new CacheKey(new Object[]{array1});
+ CacheKey key2 = new CacheKey(new Object[]{array2});
+ assertTrue(key1.equals(key2));
+ }
}