mirror of
https://github.com/ebean-orm/ebean.git
synced 2026-11-12 22:41:35 +00:00
ADD: EntityImplements and EntityOverride + Tests
This commit is contained in:
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;
|
||||
|
||||
Reference in new issue
Block a user