diff --git a/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java b/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java index e9ee824cf..b36ecbf5a 100644 --- a/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java +++ b/src/main/java/io/ebeaninternal/server/core/PersistRequestBean.java @@ -31,6 +31,7 @@ import io.ebeanservice.docstore.api.DocStoreUpdates; import javax.persistence.OptimisticLockException; import javax.persistence.PersistenceException; import java.io.IOException; +import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.Map; @@ -784,8 +785,12 @@ public final class PersistRequestBean extends PersistRequest implements BeanP @Override public final void checkRowCount(int rowCount) { if (ConcurrencyMode.VERSION == concurrencyMode && rowCount != 1) { - String m = Message.msg("persist.conc2", String.valueOf(rowCount)); - throw new OptimisticLockException(m, null, bean); + // fix for oracle. + // see: https://stackoverflow.com/questions/19022175/executebatch-method-return-array-of-value-2-in-java + if (rowCount != Statement.SUCCESS_NO_INFO) { + String m = Message.msg("persist.conc2", String.valueOf(rowCount)); + throw new OptimisticLockException(m, null, bean); + } } switch (type) { case DELETE: diff --git a/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonObjectMapper.java b/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonObjectMapper.java index fa2e61837..eda46122a 100644 --- a/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonObjectMapper.java +++ b/src/main/java/io/ebeaninternal/server/type/ScalarTypeJsonObjectMapper.java @@ -184,7 +184,7 @@ public class ScalarTypeJsonObjectMapper { bind.setObject(PostgresHelper.asObject(pgType, rawJson)); } else { if (value == null) { - bind.setNull(Types.LONGNVARCHAR); // use longvarchar, otherwise SqlServer will fail with 'Invalid JDBC data type 5.001.' + bind.setNull(Types.VARCHAR); // use varchar, otherwise SqlServer/db2 will fail with 'Invalid JDBC data type 5.001.' } else { try { String json = objectMapper.writeValueAsString(value); diff --git a/src/test/java/io/ebean/SqlRowBooleanTest.java b/src/test/java/io/ebean/SqlRowBooleanTest.java index e1edbdb55..3496b02cd 100644 --- a/src/test/java/io/ebean/SqlRowBooleanTest.java +++ b/src/test/java/io/ebean/SqlRowBooleanTest.java @@ -14,6 +14,8 @@ public class SqlRowBooleanTest extends BaseTestCase { sqlQuery = Ebean.createSqlQuery("SELECT 1 AS ISNT_NULL"); } else if (isOracle()) { sqlQuery = Ebean.createSqlQuery("SELECT 1 AS ISNT_NULL from dual"); + } else if (isDb2()) { + sqlQuery = Ebean.createSqlQuery("SELECT 1 AS ISNT_NULL from SYSIBM.SYSDUMMY1"); } else { sqlQuery = Ebean.createSqlQuery("SELECT 1 IS NOT NULL AS ISNT_NULL"); }