From a0403a4206222ca5144864f0d238413811fcc0f8 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Mon, 6 Jul 2026 20:15:15 +1200 Subject: [PATCH] Change Delete by Id with @SoftDelete to performs soft delete rather than hard delete --- .../server/core/DefaultServer.java | 3 ++ .../album/DeleteById_SoftDelete_Tests.java | 29 +++++++++++++++++++ 2 files changed, 32 insertions(+) diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java index b1caf0e27e..9f5a4963c2 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultServer.java @@ -1242,6 +1242,9 @@ public int deletePermanent(SpiQuery query) { } private int delete(SpiQuery query, boolean permanent) { + if (query.getId() != null && query.whereExpressions() == null && query.descriptor().isSoftDelete()) { + return executeInTrans((txn) -> persister.delete(query.getBeanType(), query.getId(), txn, permanent), query.transaction()); + } SpiOrmQueryRequest request = createQueryRequest(Type.DELETE, query); try { request.initTransIfRequired(); diff --git a/ebean-test/src/test/java/org/tests/model/onetoone/album/DeleteById_SoftDelete_Tests.java b/ebean-test/src/test/java/org/tests/model/onetoone/album/DeleteById_SoftDelete_Tests.java index 53d6d59325..b7214aeebd 100644 --- a/ebean-test/src/test/java/org/tests/model/onetoone/album/DeleteById_SoftDelete_Tests.java +++ b/ebean-test/src/test/java/org/tests/model/onetoone/album/DeleteById_SoftDelete_Tests.java @@ -88,6 +88,35 @@ public void deleteById_when_softDelete() { cover.deletePermanent(); } + @Test + public void queryByIdDelete_when_softDelete() { + + Cover cover = new Cover("q1"); + cover.save(); + + LoggedSql.start(); + + DB.find(Cover.class).setId(cover.getId()).delete(); + + List sql = LoggedSql.stop(); + assertThat(sql).hasSize(1); + if (isPlatformBooleanNative()) { + assertSql(sql.get(0)).contains("update cover set deleted=true where id = ?"); + } else { + assertSql(sql.get(0)).contains("update cover set deleted=1 where id = ?"); + } + + assertNull(DB.find(Cover.class, cover.getId())); + Cover softDeleted = DB.find(Cover.class) + .setIncludeSoftDeletes() + .setId(cover.getId()) + .findOne(); + assertNotNull(softDeleted); + assertThat(softDeleted.isDeleted()).isTrue(); + + cover.deletePermanent(); + } + @Test public void deletePermanentById_when_softDelete() {