From 6890ef43348754c7194dd448fe0a2cf21b7821e4 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 2 May 2022 16:04:24 +0200 Subject: [PATCH] More detailed exception on persist errors --- .../server/persist/dml/DmlBeanPersister.java | 3 ++- .../ebeaninternal/server/persist/dml/DmlHandler.java | 10 ++++++++++ .../tests/insert/TestInsertDataIntegrityException.java | 7 ++++++- 3 files changed, 18 insertions(+), 2 deletions(-) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java index 043f210aa..c781fe502 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlBeanPersister.java @@ -4,6 +4,7 @@ import io.ebean.config.dbplatform.DatabasePlatform; import io.ebean.util.StringHelper; import io.ebeaninternal.server.core.PersistRequestBean; import io.ebeaninternal.server.persist.BeanPersister; +import io.ebeaninternal.server.type.DataBindCapture; import java.sql.SQLException; @@ -70,7 +71,7 @@ final class DmlBeanPersister implements BeanPersister { } } catch (SQLException e) { // log the error to the transaction log - String msg = "Error[" + StringHelper.removeNewLines(e.getMessage()) + "]"; + String msg = "Error[" + StringHelper.removeNewLines(e.getMessage()) + "] " + handler; if (request.transaction().isLogSummary()) { request.transaction().logSummary(msg); } diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlHandler.java b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlHandler.java index 7b82e7faa..a59415987 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlHandler.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/persist/dml/DmlHandler.java @@ -259,4 +259,14 @@ public abstract class DmlHandler implements PersistHandler, BindableRequest { return stmt; } + @Override + public String toString() { + if (sql == null) { + return "not yet initialized"; + } else if (bindLog == null || bindLog.length() == 0) { + return sql; + } else { + return Str.add(sql, " -- bind(", bindLog.toString(), ")"); + } + } } diff --git a/ebean-test/src/test/java/org/tests/insert/TestInsertDataIntegrityException.java b/ebean-test/src/test/java/org/tests/insert/TestInsertDataIntegrityException.java index 35f0bf271..ce37db6df 100644 --- a/ebean-test/src/test/java/org/tests/insert/TestInsertDataIntegrityException.java +++ b/ebean-test/src/test/java/org/tests/insert/TestInsertDataIntegrityException.java @@ -5,11 +5,13 @@ import io.ebean.DB; import io.ebean.DataIntegrityException; import io.ebean.xtest.IgnorePlatform; import io.ebean.annotation.Platform; +import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import org.tests.model.basic.Customer; import org.tests.model.basic.Order; import org.tests.model.basic.ResetBasicData; +import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy; import static org.junit.jupiter.api.Assertions.assertThrows; public class TestInsertDataIntegrityException extends BaseTestCase { @@ -26,7 +28,10 @@ public class TestInsertDataIntegrityException extends BaseTestCase { Order order = new Order(); order.setStatus(Order.Status.NEW); order.setCustomer(invalidCustomer); + assertThatThrownBy(() -> DB.save(order)) + .isInstanceOf(DataIntegrityException.class) + .hasMessageContaining("insert into o_order") + .hasMessageContaining(",900000"); - assertThrows(DataIntegrityException.class, () -> DB.save(order)); } }