ADD: EntityImplements and EntityOverride + Tests

This commit is contained in:
Jonas Pöhler committed 2021-10-22 13:46:41 +02:00
1 parent 7ace1c87a1
commit 45aa04e086
16 files changed
+350 -32

No files matched your search

@@ -0,0 +1,25 @@
package org.tests.model.interfaces;
import io.ebean.annotation.EntityImplements;
import io.ebean.annotation.EntityOverride;
import javax.persistence.Entity;
@Entity()
@EntityImplements(IExtPerson1.class)
@EntityOverride(priority = 30)
public class ExtPerson1 extends Person implements IExtPerson1 {
private int myField1;
@Override
public int getMyField1() {
return myField1;
}
@Override
public void setMyField1(int myField1) {
this.myField1 = myField1;
}
}
@@ -0,0 +1,26 @@
package org.tests.model.interfaces;
import io.ebean.annotation.EntityImplements;
import io.ebean.annotation.EntityOverride;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity()
@Table(name = "person")
@EntityImplements(IExtPerson2.class)
@EntityOverride(priority = -30)
public class ExtPerson1and2 extends ExtPerson1 implements IExtPerson2 {
private int myField2;
@Override
public int getMyField2() {
return myField2;
}
@Override
public void setMyField2(int myField2) {
this.myField2 = myField2;
}
}
@@ -0,0 +1,27 @@
package org.tests.model.interfaces;
import io.ebean.annotation.EntityImplements;
import io.ebean.annotation.EntityOverride;
import javax.persistence.Entity;
import javax.persistence.Table;
@Entity
@EntityOverride(priority = 20)
@EntityImplements(IExtPerson2.class)
@Table(name = "person")
public class ExtPerson2 extends Person implements IExtPerson2 {
private int myField2;
@Override
public int getMyField2() {
return myField2;
}
@Override
public void setMyField2(int myField2) {
this.myField2 = myField2;
}
}
@@ -0,0 +1,7 @@
package org.tests.model.interfaces;
public interface IExtPerson1 extends IPerson {
int getMyField1();
void setMyField1(int myField1);
}
@@ -0,0 +1,7 @@
package org.tests.model.interfaces;
public interface IExtPerson2 extends IPerson {
int getMyField2();
void setMyField2(int myField2);
}
@@ -5,27 +5,51 @@ import io.ebean.DB;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.ResetBasicData;
import org.tests.model.interfaces.Address;
import org.tests.model.interfaces.ExtPerson1and2;
import org.tests.model.interfaces.IAddress;
import org.tests.model.interfaces.IExtPerson1;
import org.tests.model.interfaces.IExtPerson2;
import org.tests.model.interfaces.IPerson;
import org.tests.model.interfaces.Person;
import static org.assertj.core.api.Assertions.assertThat;
public class TestManyOneInterface extends BaseTestCase {
@Test
public void test() {
public void testEntityOverrideEntityImplements() {
ResetBasicData.reset();
IAddress a = new Address("hello");
IAddress a = DB.getDefault().createEntityBean(IAddress.class);
assertThat(a).isInstanceOf(Address.class);
IPerson p = new Person();
IPerson p = DB.getDefault().createEntityBean(Person.class);
assertThat(p).isInstanceOf(ExtPerson1and2.class);
p = DB.getDefault().getPluginApi().createEntityBean(IPerson.class);
assertThat(p).isInstanceOf(ExtPerson1and2.class);
p.setDefaultAddress(a);
DB.save(a);
IAddress ea1 = DB.getDefault().createEntityBean(IAddress.class);
IAddress ea2 = DB.getDefault().createEntityBean(IAddress.class);
p.getExtraAddresses().add(ea1);
p.getExtraAddresses().add(ea2);
DB.save(p);
//Assert.assertTrue();
IAddress a2 = DB.find(IAddress.class, a.getOid());
IPerson p2 = DB.find(IPerson.class, p.getOid());
assertThat(a2).isInstanceOf(Address.class);
assertThat(p2).isNotNull().isInstanceOf(ExtPerson1and2.class);
assertThat(p2.getDefaultAddress()).isInstanceOf(Address.class);
// some more checks
IExtPerson1 pe1 = DB.getDefault().getPluginApi().createEntityBean(IExtPerson1.class);
IExtPerson2 pe2 = DB.getDefault().getPluginApi().createEntityBean(IExtPerson2.class);
assertThat(pe1).isInstanceOf(ExtPerson1and2.class);
assertThat(pe2).isInstanceOf(ExtPerson1and2.class);
}
}
@@ -1,10 +1,14 @@
package org.tests.model.interfaces;
import io.ebean.annotation.EntityImplements;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToOne;
import javax.persistence.Version;
@Entity
@EntityImplements(IAddress.class)
public class Address implements IAddress {
@Id
@@ -15,6 +19,9 @@ public class Address implements IAddress {
private String street;
@ManyToOne
private Person extraAddress;
public Address(String street) {
this.street = street;
}
@@ -1,6 +1,9 @@
package org.tests.model.interfaces;
public interface IAddress {
long getOid();
String getStreet();
void setStreet(String s);
@@ -1,7 +1,16 @@
package org.tests.model.interfaces;
import java.util.List;
public interface IPerson {
long getOid();
IAddress getDefaultAddress();
void setDefaultAddress(IAddress address);
List<IAddress> getExtraAddresses();
List<IAddress> getAddressLinks();
}
@@ -1,11 +1,19 @@
package org.tests.model.interfaces;
import io.ebean.annotation.EntityImplements;
import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.ManyToMany;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;
import javax.persistence.Version;
import java.util.ArrayList;
import java.util.List;
@Entity
@EntityImplements(IPerson.class)
public class Person implements IPerson {
@Id
private long oid;
@@ -13,9 +21,15 @@ public class Person implements IPerson {
@Version
private int version;
@ManyToOne(targetEntity = Address.class)
@ManyToOne(cascade = CascadeType.PERSIST)
private IAddress defaultAddress;
@OneToMany(cascade = CascadeType.PERSIST, orphanRemoval = true)
private List<IAddress> extraAddresses = new ArrayList<>();
@ManyToMany(cascade = CascadeType.PERSIST)
private List<IAddress> addressLinks = new ArrayList<>();
@Override
public IAddress getDefaultAddress() {
return defaultAddress;
@@ -42,4 +56,14 @@ public class Person implements IPerson {
this.version = version;
}
@Override
public List<IAddress> getExtraAddresses() {
return extraAddresses;
}
@Override
public List<IAddress> getAddressLinks() {
return addressLinks;
}
}
@@ -30,7 +30,7 @@ public class TestTargetEntity extends BaseTestCase {
private Person setup() {
Address address = new Address("street");
DB.save(address);
Person person = new Person();
Person person = DB.getDefault().createEntityBean(Person.class);
person.setDefaultAddress(address);
DB.save(person);
return person;