Skip to content

Commit d42f72c

Browse files
authored
Merge pull request #3788 from mvanhorn/fix/3641-refresh-soft-deleted
Fix refresh on soft-deleted beans
2 parents 7c5ee5b + 6d53e89 commit d42f72c

2 files changed

Lines changed: 31 additions & 1 deletion

File tree

ebean-core/src/main/java/io/ebeaninternal/server/core/DefaultBeanLoader.java

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -188,7 +188,10 @@ private void refreshBeanInternal(EntityBean bean, SpiQuery.Mode mode, int embedd
188188
query.setLazyLoadProperty(ebi.lazyLoadProperty());
189189
if (draft) {
190190
query.asDraft();
191-
} else if (mode == SpiQuery.Mode.LAZYLOAD_BEAN && desc.isSoftDelete()) {
191+
} else if (desc.isSoftDelete()
192+
&& (mode == SpiQuery.Mode.LAZYLOAD_BEAN || mode == SpiQuery.Mode.REFRESH_BEAN)) {
193+
// include soft-deleted rows when lazy loading or refreshing so a
194+
// refresh() on a soft-deleted bean can reload it (issue #3641)
192195
query.setIncludeSoftDeletes();
193196
}
194197
if (embeddedOwnerIndex > -1) {

ebean-test/src/test/java/org/tests/softdelete/TestSoftDeleteBasic.java

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,33 @@ public void test() {
155155
assertThat(findInclude).isNotNull();
156156
}
157157

158+
@Test
159+
public void testRefreshSoftDeleted() {
160+
161+
EBasicSoftDelete bean = new EBasicSoftDelete();
162+
bean.setName("refreshSoftDeleted");
163+
DB.save(bean);
164+
165+
DB.delete(bean);
166+
167+
// obtain a handle to the soft-deleted bean
168+
EBasicSoftDelete softDeleted = DB.find(EBasicSoftDelete.class)
169+
.setId(bean.getId())
170+
.setIncludeSoftDeletes()
171+
.findOne();
172+
173+
assertThat(softDeleted).isNotNull();
174+
175+
// refresh() must not throw EntityNotFoundException for a soft-deleted bean (issue #3641)
176+
DB.refresh(softDeleted);
177+
178+
assertThat(softDeleted.getName()).isEqualTo("refreshSoftDeleted");
179+
assertThat(softDeleted.isDeleted()).isTrue();
180+
181+
// Cleanup created entity
182+
DB.deletePermanent(softDeleted);
183+
}
184+
158185
@Test
159186
public void testFindSoftDeleted() {
160187

0 commit comments

Comments
 (0)