#2472 - BeanPersistController and isCascade() for delete requests (following #2458)

This commit is contained in:
Rob Bygrave committed 2021-12-20 15:49:58 +13:00
1 parent c3320f4a0b
commit 361df6732a
5 files changed
+52 -10

No files matched your search

@@ -6,6 +6,7 @@ import io.ebean.DB;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.TWithPreInsert;
import org.tests.model.basic.TWithPreInsertChild;
import org.tests.model.basic.event.TWithPreInsertPersistAdapter;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertNotNull;
@@ -27,6 +28,7 @@ class TestPreInsertValidation extends BaseTestCase {
assertThat(e.requestCascadeState()).isEqualTo(2);
TWithPreInsert e1 = DB.find(TWithPreInsert.class, e.getId());
assert e1 != null;
e1.setTitle("Missus");
DB.save(e1);
@@ -54,11 +56,21 @@ class TestPreInsertValidation extends BaseTestCase {
assert e1 != null;
e1.setTitle("ParentCascading-changed");
e1.children().get(0).setName("Child0-changed");
TWithPreInsertChild childBean = e1.children().get(0);
childBean.setName("Child0-changed");
DB.save(e1);
assertThat(e1.requestCascadeState()).isEqualTo(12);
assertThat(e1.children().get(0).requestCascadeState()).isEqualTo(11);
assertThat(childBean.requestCascadeState()).isEqualTo(11);
DB.delete(e1);
assertThat(e1.requestCascadeState()).isEqualTo(22);
// assert that isCascade() was true for the child bean
assertThat(TWithPreInsertPersistAdapter.cascadeDelete).hasSize(1);
String deleteCascade = TWithPreInsertPersistAdapter.cascadeDelete.get(0);
assertThat(deleteCascade).isEqualTo("class org.tests.model.basic.TWithPreInsertChild:1");
}
@Test
@@ -7,7 +7,7 @@ import javax.validation.constraints.NotNull;
import java.util.ArrayList;
import java.util.List;
import static javax.persistence.CascadeType.PERSIST;
import static javax.persistence.CascadeType.ALL;
@Entity
public class TWithPreInsert implements TWithPreInsertCommon {
@@ -20,7 +20,7 @@ public class TWithPreInsert implements TWithPreInsertCommon {
private String title;
@OneToMany(cascade = PERSIST)
@OneToMany(cascade = ALL)
private List<TWithPreInsertChild> children = new ArrayList<>();
/**
@@ -2,6 +2,8 @@ package org.tests.model.basic;
public interface TWithPreInsertCommon {
Integer getId();
String getName();
void setName(String name);
@@ -4,8 +4,13 @@ import io.ebean.event.BeanPersistAdapter;
import io.ebean.event.BeanPersistRequest;
import org.tests.model.basic.TWithPreInsertCommon;
import java.util.ArrayList;
import java.util.List;
public class TWithPreInsertPersistAdapter extends BeanPersistAdapter {
public static List<String> cascadeDelete = new ArrayList<>();
@Override
public boolean isRegisterFor(Class<?> cls) {
return TWithPreInsertCommon.class.isAssignableFrom(cls);
@@ -32,4 +37,14 @@ public class TWithPreInsertPersistAdapter extends BeanPersistAdapter {
return super.preUpdate(request);
}
@Override
public boolean preDelete(BeanPersistRequest<?> request) {
TWithPreInsertCommon bean = (TWithPreInsertCommon) request.bean();
if (request.isCascade()) {
cascadeDelete.add(bean.getClass() + ":" + bean.getId());
} else {
bean.requestCascadeState(22);
}
return true;
}
}