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)); + } }