From 2646e8c27fa24ca4a293c3dcd19306e4e4db789f Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Mon, 15 Oct 2018 22:30:42 +1300 Subject: [PATCH] #1507 - SqlUpdate.execute PersistenceException is not translated into more specific exception (like DuplicateKeyException) Support for sqlUpdate.executeBatch() --- .../server/persist/DefaultPersister.java | 2 +- .../tests/update/TestSqlUpdateExceptions.java | 23 +++++++++++++++++++ 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/main/java/io/ebeaninternal/server/persist/DefaultPersister.java b/src/main/java/io/ebeaninternal/server/persist/DefaultPersister.java index fea311ad1..2a1651660 100644 --- a/src/main/java/io/ebeaninternal/server/persist/DefaultPersister.java +++ b/src/main/java/io/ebeaninternal/server/persist/DefaultPersister.java @@ -137,7 +137,7 @@ public final class DefaultPersister implements Persister { try { return batchControl.execute(sqlUpdate.getSql(), sqlUpdate.isGetGeneratedKeys()); } catch (SQLException e) { - throw new PersistenceException(e); + throw transaction.translate(e.getMessage(), e); } } diff --git a/src/test/java/org/tests/update/TestSqlUpdateExceptions.java b/src/test/java/org/tests/update/TestSqlUpdateExceptions.java index 20007ce7e..7296811f2 100644 --- a/src/test/java/org/tests/update/TestSqlUpdateExceptions.java +++ b/src/test/java/org/tests/update/TestSqlUpdateExceptions.java @@ -69,4 +69,27 @@ public class TestSqlUpdateExceptions extends BaseTestCase { transaction.commit(); } } + + @Test(expected = DuplicateKeyException.class) + public void duplicateKey_executeBatch() { + + UUID id = UUID.randomUUID(); + + try (Transaction transaction = Ebean.beginTransaction()) { + + SqlUpdate sqlUpdate = Ebean.createSqlUpdate(sql); + sqlUpdate.setParameter(1, id); + sqlUpdate.setParameter(2, "hi in batch"); + sqlUpdate.setParameter(3, 1); + sqlUpdate.addBatch(); + + sqlUpdate.setParameter(1, id); + sqlUpdate.setParameter(2, "fail in batch"); + sqlUpdate.setParameter(3, 1); + sqlUpdate.addBatch(); + int[] ints = sqlUpdate.executeBatch(); + + transaction.commit(); + } + } }