From 5cfde0af2083d287d7c247f604edd483aef460b4 Mon Sep 17 00:00:00 2001 From: Lukas Eder Date: Sat, 22 Dec 2012 20:46:49 +0100 Subject: [PATCH] [#2045] Bad hashCode calculation when Records contain arrays or byte[] --- .../src/main/java/org/jooq/impl/AbstractStore.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java b/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java index 0cd15a5c1e..6017d0d1be 100644 --- a/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java +++ b/jOOQ/src/main/java/org/jooq/impl/AbstractStore.java @@ -118,7 +118,19 @@ abstract class AbstractStore implements AttachableInternal { for (int i = 0; i < size(); i++) { final Object obj = getValue(i); - hashCode = 31 * hashCode + (obj == null ? 0 : obj.hashCode()); + + if (obj == null) { + hashCode = 31 * hashCode; + } + + // [#985] [#2045] Don't use obj.hashCode() on arrays, but avoid + // calculating it as byte[] (BLOBs) can be quite large + else if (obj.getClass().isArray()) { + hashCode = 31 * hashCode; + } + else { + hashCode = 31 * hashCode + obj.hashCode(); + } } return hashCode;