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