mirror of
https://github.com/ebean-orm/ebean.git
synced 2024-04-21 10:51:47 +00:00
#2067 - Extract ebean-autotune into separate module
This commit is contained in:
+31
@@ -0,0 +1,31 @@
|
||||
package io.ebeaninternal.server.autotune.service;
|
||||
|
||||
import io.ebeaninternal.server.autotune.model.Autotune;
|
||||
import org.junit.Test;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class AutoTuneXmlReaderTest {
|
||||
|
||||
@Test
|
||||
public void read_file() {
|
||||
|
||||
File testFile = new File("src/test/resources/autotune/test-autotune.xml");
|
||||
|
||||
Autotune tuneInfo = AutoTuneXmlReader.read(testFile);
|
||||
assertThat(tuneInfo.getOrigin()).isNotEmpty();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void read_inputStream() {
|
||||
|
||||
InputStream is = getClass().getResourceAsStream("/autotune/test-autotune.xml");
|
||||
|
||||
Autotune tuneInfo = AutoTuneXmlReader.read(is);
|
||||
assertThat(tuneInfo.getOrigin()).isNotEmpty();
|
||||
}
|
||||
|
||||
}
|
||||
+142
@@ -0,0 +1,142 @@
|
||||
package io.ebeaninternal.server.autotune.service;
|
||||
|
||||
import io.ebean.DB;
|
||||
import io.ebean.bean.NodeUsageCollector;
|
||||
import io.ebean.bean.ObjectGraphNode;
|
||||
import io.ebean.bean.ObjectGraphOrigin;
|
||||
import io.ebeaninternal.server.deploy.BeanDescriptor;
|
||||
import io.ebeaninternal.server.querydefn.OrmQueryDetail;
|
||||
import org.junit.Test;
|
||||
import org.tests.autofetch.BaseTestCase;
|
||||
import org.tests.model.basic.Order;
|
||||
//import org.tests.model.basic.ResetBasicData;
|
||||
|
||||
import static org.assertj.core.api.Assertions.assertThat;
|
||||
|
||||
public class ProfileOriginTest extends BaseTestCase {
|
||||
|
||||
|
||||
private BeanDescriptor<Order> desc = getBeanDescriptor(Order.class);
|
||||
|
||||
@Test
|
||||
public void buildDetail() {
|
||||
|
||||
NodeUsageCollector c = node("customer");
|
||||
c.addUsed("id");
|
||||
c.addUsed("name");
|
||||
|
||||
ProfileOrigin po = new ProfileOrigin(null, false, 1, 1);
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
OrmQueryDetail detail = po.buildDetail(desc);
|
||||
|
||||
assertThat(detail.asString().trim()).isEqualTo("fetch customer (name)");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void buildDetail_selectFetch() {
|
||||
|
||||
NodeUsageCollector c = node("customer");
|
||||
c.addUsed("id");
|
||||
c.addUsed("name");
|
||||
|
||||
ProfileOrigin po = new ProfileOrigin(null, false, 1, 1);
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
c = node(null);
|
||||
c.addUsed("orderDate");
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
OrmQueryDetail detail = po.buildDetail(desc);
|
||||
|
||||
assertThat(detail.asString()).isEqualTo("select (orderDate) fetch customer (name)");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void buildDetail_expect_mergeFetchToSelect() {
|
||||
|
||||
NodeUsageCollector c = node("customer");
|
||||
c.addUsed("id");
|
||||
|
||||
ProfileOrigin po = new ProfileOrigin(null, false, 1, 1);
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
c = node(null);
|
||||
c.addUsed("orderDate");
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
OrmQueryDetail detail = po.buildDetail(desc);
|
||||
|
||||
assertThat(detail.asString().trim()).isEqualTo("select (orderDate,customer)");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void buildDetail_expect_mergeFetchToParentFetch() {
|
||||
|
||||
ProfileOrigin po = new ProfileOrigin(null, false, 1, 1);
|
||||
|
||||
NodeUsageCollector c = node(null);
|
||||
c.addUsed("orderDate");
|
||||
c.addUsed("customer");
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
c = node("customer");
|
||||
c.addUsed("billingAddress");
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
c = node("customer.billingAddress");
|
||||
c.addUsed("id");
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
OrmQueryDetail detail = po.buildDetail(desc);
|
||||
|
||||
assertThat(detail.asString()).isEqualTo("select (orderDate) fetch customer (billingAddress)");
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void buildDetail_expect_mergeMulit() {
|
||||
|
||||
ProfileOrigin po = new ProfileOrigin(null, false, 1, 1);
|
||||
|
||||
//fetch details (id,orderQty,shipQty,unitPrice)
|
||||
|
||||
NodeUsageCollector c = node(null);
|
||||
c.addUsed("customer");
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
c = node("customer");
|
||||
c.addUsed("id");
|
||||
c.addUsed("name");
|
||||
c.addUsed("note");
|
||||
c.addUsed("billingAddress");
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
//fetch details.product (id,name)
|
||||
c = node("customer.billingAddress");
|
||||
c.addUsed("id");
|
||||
c.addUsed("line1");
|
||||
po.collectUsageInfo(c);
|
||||
|
||||
OrmQueryDetail detail = po.buildDetail(desc);
|
||||
assertThat(detail.asString()).isEqualTo("fetch customer (name,note) fetch customer.billingAddress (line1)");
|
||||
}
|
||||
|
||||
private NodeUsageCollector node(String path) {
|
||||
ObjectGraphNode node = new ObjectGraphNode((ObjectGraphOrigin)null, path);
|
||||
return new NodeUsageCollector(node, null);
|
||||
}
|
||||
|
||||
// @Test
|
||||
// public void testQueries() {
|
||||
//
|
||||
// ResetBasicData.reset();
|
||||
//
|
||||
// //DB.createQuery(Order.class, "select (orderDate) fetch customer (billingAddress)").findList();
|
||||
//
|
||||
// // we prefer this first query other the second one
|
||||
// DB.createQuery(Order.class, "select (orderDate,customer)").findList();
|
||||
// DB.createQuery(Order.class, "select (orderDate) fetch customer (id)").findList();
|
||||
//
|
||||
// }
|
||||
}
|
||||
@@ -0,0 +1,16 @@
|
||||
package org.tests.autofetch;
|
||||
|
||||
import io.ebean.DB;
|
||||
import io.ebeaninternal.api.SpiEbeanServer;
|
||||
import io.ebeaninternal.server.deploy.BeanDescriptor;
|
||||
|
||||
public class BaseTestCase {
|
||||
|
||||
protected SpiEbeanServer spiEbeanServer() {
|
||||
return (SpiEbeanServer) DB.getDefault();
|
||||
}
|
||||
|
||||
protected <T> BeanDescriptor<T> getBeanDescriptor(Class<T> cls) {
|
||||
return spiEbeanServer().getBeanDescriptor(cls);
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,32 @@
|
||||
package org.tests.autofetch;
|
||||
|
||||
//import io.ebean.Ebean;
|
||||
//import org.tests.model.basic.EBasicClob;
|
||||
|
||||
//import java.util.List;
|
||||
|
||||
public class MainAutoFetchExcludeLazyLobs {
|
||||
|
||||
// public static void main(String[] args) {
|
||||
//
|
||||
// EBasicClob a = new EBasicClob();
|
||||
// a.setName("name 1");
|
||||
// a.setTitle("a title");
|
||||
// a.setDescription("not that meaningful");
|
||||
//
|
||||
// Ebean.save(a);
|
||||
//
|
||||
// List<EBasicClob> list = Ebean.find(EBasicClob.class)
|
||||
// .setAutoTune(true)
|
||||
// .findList();
|
||||
//
|
||||
// for (EBasicClob bean : list) {
|
||||
// bean.getName();
|
||||
// // although we read the description
|
||||
// // autofetch will not include it later
|
||||
// bean.getDescription();
|
||||
// }
|
||||
//
|
||||
//
|
||||
// }
|
||||
}
|
||||
@@ -0,0 +1,28 @@
|
||||
package org.tests.autofetch;
|
||||
|
||||
public class MainAutoQueryTune1 {
|
||||
|
||||
// public static void main(String[] args) {
|
||||
//
|
||||
// ResetBasicData.reset();
|
||||
//
|
||||
// MainAutoQueryTune1 me = new MainAutoQueryTune1();
|
||||
// me.tuneJoin();
|
||||
// }
|
||||
//
|
||||
// private void tuneJoin() {
|
||||
// List<Order> list = Ebean.find(Order.class)
|
||||
// .setAutoTune(true)
|
||||
// .fetch("customer")
|
||||
// .where()
|
||||
// .eq("status", Order.Status.NEW)
|
||||
// .eq("customer.name", "Rob")
|
||||
// .order().asc("id")
|
||||
// .findList();
|
||||
//
|
||||
// for (Order order : list) {
|
||||
// order.getId();
|
||||
// order.getOrderDate();
|
||||
// }
|
||||
// }
|
||||
}
|
||||
@@ -0,0 +1,172 @@
|
||||
package org.tests.autofetch;
|
||||
|
||||
//import io.ebean.BaseTestCase;
|
||||
//import io.ebean.Ebean;
|
||||
//import io.ebean.EbeanServer;
|
||||
//import io.ebean.Query;
|
||||
//import io.ebean.bean.EntityBean;
|
||||
//import io.ebean.bean.EntityBeanIntercept;
|
||||
//import io.ebean.cache.ServerCacheManager;
|
||||
//import io.ebeaninternal.api.SpiQuery;
|
||||
//import io.ebeaninternal.server.autotune.model.Origin;
|
||||
//import io.ebeaninternal.server.autotune.service.TunedQueryInfo;
|
||||
//import io.ebeaninternal.server.querydefn.OrmQueryDetail;
|
||||
//import org.ebeantest.LoggedSqlCollector;
|
||||
//import org.junit.Assert;
|
||||
//import org.junit.Test;
|
||||
//import org.tests.model.basic.Order;
|
||||
//import org.tests.model.basic.ResetBasicData;
|
||||
//
|
||||
//import java.util.List;
|
||||
//import java.util.Set;
|
||||
|
||||
public class TunedQueryInfoTest extends BaseTestCase {
|
||||
|
||||
// private void init() {
|
||||
//
|
||||
// ResetBasicData.reset();
|
||||
//
|
||||
// ServerCacheManager serverCacheManager = Ebean.getServer(null).getServerCacheManager();
|
||||
// serverCacheManager.clearAll();
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void withSelectEmpty() {
|
||||
//
|
||||
// init();
|
||||
//
|
||||
// OrmQueryDetail tunedDetail = new OrmQueryDetail();
|
||||
// tunedDetail.select("");
|
||||
//
|
||||
// TunedQueryInfo tunedInfo = createTunedQueryInfo(tunedDetail);
|
||||
//
|
||||
// Query<Order> query = server.find(Order.class).setId(1);
|
||||
//
|
||||
// tunedInfo.tuneQuery((SpiQuery<?>) query);
|
||||
//
|
||||
// Order order = query.findOne();
|
||||
// EntityBean eb = (EntityBean) order;
|
||||
// EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
//
|
||||
// Assert.assertTrue(ebi.isFullyLoadedBean());
|
||||
//
|
||||
// Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
|
||||
// Assert.assertNull(loadedPropertyNames);
|
||||
//
|
||||
// // invoke lazy loading
|
||||
// order.getCustomer();
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void withSelectSomethingThatDoesNotExist() {
|
||||
//
|
||||
// init();
|
||||
//
|
||||
// OrmQueryDetail tunedDetail = new OrmQueryDetail();
|
||||
// tunedDetail.select("somethingThatDoesNotExist");
|
||||
//
|
||||
// TunedQueryInfo tunedInfo = createTunedQueryInfo(tunedDetail);
|
||||
//
|
||||
// Query<Order> query = server.find(Order.class).setId(1);
|
||||
//
|
||||
// tunedInfo.tuneQuery((SpiQuery<?>) query);
|
||||
//
|
||||
// LoggedSqlCollector.start();
|
||||
//
|
||||
// Order order = query.findOne();
|
||||
// EntityBean eb = (EntityBean) order;
|
||||
// EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
//
|
||||
// Assert.assertFalse(ebi.isFullyLoadedBean());
|
||||
//
|
||||
// // id and any ToMany relationships
|
||||
// Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
|
||||
// Assert.assertNotNull(loadedPropertyNames);
|
||||
//
|
||||
// // invoke lazy loading
|
||||
// order.getCustomer();
|
||||
//
|
||||
// List<String> loggedSql = LoggedSqlCollector.stop();
|
||||
// Assert.assertEquals(2, loggedSql.size());
|
||||
//
|
||||
// Assert.assertTrue(trimSql(loggedSql.get(0), 1).contains("select t0.id, t0.id from o_order t0 where t0.id = ?"));
|
||||
// Assert.assertTrue(trimSql(loggedSql.get(1), 1).contains("select t0.id, t0.status,"));
|
||||
// }
|
||||
//
|
||||
// private TunedQueryInfo createTunedQueryInfo(OrmQueryDetail tunedDetail) {
|
||||
// Origin origin = new Origin();
|
||||
// origin.setDetail(tunedDetail.asString());
|
||||
// return new TunedQueryInfo(origin);
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void withSelectSomeIncludeLazyLoaded() {
|
||||
//
|
||||
// init();
|
||||
//
|
||||
// OrmQueryDetail tunedDetail = new OrmQueryDetail();
|
||||
// tunedDetail.select("status, customer");
|
||||
//
|
||||
// TunedQueryInfo tunedInfo = createTunedQueryInfo(tunedDetail);
|
||||
//
|
||||
// Query<Order> query = server.find(Order.class).setId(1);
|
||||
//
|
||||
// tunedInfo.tuneQuery((SpiQuery<?>) query);
|
||||
//
|
||||
// LoggedSqlCollector.start();
|
||||
//
|
||||
// Order order = query.findOne();
|
||||
// EntityBean eb = (EntityBean) order;
|
||||
// EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
//
|
||||
// Assert.assertFalse(ebi.isFullyLoadedBean());
|
||||
//
|
||||
// Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
|
||||
// Assert.assertNotNull(loadedPropertyNames);
|
||||
//
|
||||
// Assert.assertTrue(loadedPropertyNames.contains("status"));
|
||||
// Assert.assertTrue(loadedPropertyNames.contains("customer"));
|
||||
//
|
||||
// // no lazy loading expected here
|
||||
// order.getCustomer();
|
||||
//
|
||||
// List<String> loggedSql = LoggedSqlCollector.stop();
|
||||
// Assert.assertEquals(1, loggedSql.size());
|
||||
// }
|
||||
//
|
||||
// @Test
|
||||
// public void withSelectSome() {
|
||||
//
|
||||
// init();
|
||||
//
|
||||
// OrmQueryDetail tunedDetail = new OrmQueryDetail();
|
||||
// tunedDetail.select("status");
|
||||
//
|
||||
// TunedQueryInfo tunedInfo = createTunedQueryInfo(tunedDetail);
|
||||
//
|
||||
// Query<Order> query = server.find(Order.class).setId(1);
|
||||
//
|
||||
// tunedInfo.tuneQuery((SpiQuery<?>) query);
|
||||
//
|
||||
// LoggedSqlCollector.start();
|
||||
//
|
||||
// Order order = query.findOne();
|
||||
// EntityBean eb = (EntityBean) order;
|
||||
// EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
//
|
||||
// Assert.assertFalse(ebi.isFullyLoadedBean());
|
||||
//
|
||||
// Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
|
||||
// Assert.assertNotNull(loadedPropertyNames);
|
||||
//
|
||||
// Assert.assertTrue(loadedPropertyNames.contains("status"));
|
||||
// Assert.assertFalse(loadedPropertyNames.contains("customer"));
|
||||
//
|
||||
// // no lazy loading expected here
|
||||
// order.getCustomer();
|
||||
//
|
||||
// List<String> loggedSql = LoggedSqlCollector.stop();
|
||||
// Assert.assertEquals(2, loggedSql.size());
|
||||
// }
|
||||
|
||||
}
|
||||
+69
@@ -0,0 +1,69 @@
|
||||
package org.tests.autofetch;
|
||||
|
||||
//import io.ebean.BaseTestCase;
|
||||
//import io.ebean.Ebean;
|
||||
//import io.ebean.EbeanServer;
|
||||
//import io.ebean.Query;
|
||||
//import io.ebean.bean.EntityBean;
|
||||
//import io.ebean.bean.EntityBeanIntercept;
|
||||
//import org.ebeantest.LoggedSqlCollector;
|
||||
//import org.junit.Assert;
|
||||
//import org.junit.Test;
|
||||
//import org.tests.model.basic.Address;
|
||||
//import org.tests.model.basic.Customer;
|
||||
//import org.tests.model.basic.ResetBasicData;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
public class TunedQueryWithNullFetchedBeanTest extends BaseTestCase {
|
||||
|
||||
// EbeanServer server = Ebean.getServer(null);
|
||||
//
|
||||
// @Test
|
||||
// public void withFetchOfNullBeanJoin() {
|
||||
//
|
||||
// ResetBasicData.reset();
|
||||
//
|
||||
// Customer newCustomer = new Customer();
|
||||
// newCustomer.setName("TestFetchBillingAddress");
|
||||
// server.save(newCustomer);
|
||||
//
|
||||
// Query<Customer> query = server.find(Customer.class)
|
||||
// .setId(newCustomer.getId())
|
||||
// .fetch("billingAddress", "id");
|
||||
//
|
||||
// LoggedSqlCollector.start();
|
||||
//
|
||||
// Customer customer = query.findOne();
|
||||
// EntityBean eb = (EntityBean) customer;
|
||||
// EntityBeanIntercept ebi = eb._ebean_getIntercept();
|
||||
//
|
||||
// Assert.assertTrue(ebi.isFullyLoadedBean());
|
||||
//
|
||||
// // find the internal property index for "billingAddress"
|
||||
// String[] propNames = eb._ebean_getPropertyNames();
|
||||
// int pos = 0;
|
||||
// for (int i = 0; i < propNames.length; i++) {
|
||||
// if (propNames[i].equals("billingAddress")) {
|
||||
// pos = i;
|
||||
// }
|
||||
// }
|
||||
//
|
||||
// // The billing address is loaded (but value null)
|
||||
// Assert.assertTrue(ebi.isLoadedProperty(pos));
|
||||
//
|
||||
// Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
|
||||
// Assert.assertNull(loadedPropertyNames);
|
||||
//
|
||||
// // no lazy loading expected here, value is null
|
||||
// Address billingAddress = customer.getBillingAddress();
|
||||
// Assert.assertNull(billingAddress);
|
||||
//
|
||||
// // assert only one query executed
|
||||
// List<String> loggedSql = LoggedSqlCollector.stop();
|
||||
// Assert.assertEquals(1, loggedSql.size());
|
||||
//
|
||||
// Ebean.delete(newCustomer);
|
||||
// }
|
||||
}
|
||||
@@ -0,0 +1,38 @@
|
||||
package org.tests.model.basic;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "address")
|
||||
public class Address extends BaseModel {
|
||||
|
||||
String line1;
|
||||
String line2;
|
||||
String city;
|
||||
|
||||
public String getLine1() {
|
||||
return line1;
|
||||
}
|
||||
|
||||
public void setLine1(String line1) {
|
||||
this.line1 = line1;
|
||||
}
|
||||
|
||||
public String getLine2() {
|
||||
return line2;
|
||||
}
|
||||
|
||||
public void setLine2(String line2) {
|
||||
this.line2 = line2;
|
||||
}
|
||||
|
||||
public String getCity() {
|
||||
return city;
|
||||
}
|
||||
|
||||
public void setCity(String city) {
|
||||
this.city = city;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,58 @@
|
||||
package org.tests.model.basic;
|
||||
|
||||
import io.ebean.Model;
|
||||
import io.ebean.annotation.WhenCreated;
|
||||
import io.ebean.annotation.WhenModified;
|
||||
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.MappedSuperclass;
|
||||
import javax.persistence.Version;
|
||||
import java.time.Instant;
|
||||
|
||||
@MappedSuperclass
|
||||
public class BaseModel extends Model {
|
||||
|
||||
@Id
|
||||
long id;
|
||||
|
||||
@WhenCreated
|
||||
Instant whenCreated;
|
||||
|
||||
@WhenModified
|
||||
Instant whenModified;
|
||||
|
||||
@Version
|
||||
long version;
|
||||
|
||||
public long getId() {
|
||||
return id;
|
||||
}
|
||||
|
||||
public void setId(long id) {
|
||||
this.id = id;
|
||||
}
|
||||
|
||||
public Instant getWhenCreated() {
|
||||
return whenCreated;
|
||||
}
|
||||
|
||||
public void setWhenCreated(Instant whenCreated) {
|
||||
this.whenCreated = whenCreated;
|
||||
}
|
||||
|
||||
public Instant getWhenModified() {
|
||||
return whenModified;
|
||||
}
|
||||
|
||||
public void setWhenModified(Instant whenModified) {
|
||||
this.whenModified = whenModified;
|
||||
}
|
||||
|
||||
public long getVersion() {
|
||||
return version;
|
||||
}
|
||||
|
||||
public void setVersion(long version) {
|
||||
this.version = version;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,41 @@
|
||||
package org.tests.model.basic;
|
||||
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
|
||||
@Entity
|
||||
@Table(name = "o_customer")
|
||||
public class Customer extends BaseModel {
|
||||
|
||||
String name;
|
||||
|
||||
String note;
|
||||
|
||||
@ManyToOne
|
||||
Address billingAddress;
|
||||
|
||||
public String getName() {
|
||||
return name;
|
||||
}
|
||||
|
||||
public void setName(String name) {
|
||||
this.name = name;
|
||||
}
|
||||
|
||||
public String getNote() {
|
||||
return note;
|
||||
}
|
||||
|
||||
public void setNote(String note) {
|
||||
this.note = note;
|
||||
}
|
||||
|
||||
public Address getBillingAddress() {
|
||||
return billingAddress;
|
||||
}
|
||||
|
||||
public void setBillingAddress(Address billingAddress) {
|
||||
this.billingAddress = billingAddress;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,60 @@
|
||||
package org.tests.model.basic;
|
||||
|
||||
import io.ebean.Model;
|
||||
import io.ebean.annotation.WhenModified;
|
||||
|
||||
import javax.persistence.CascadeType;
|
||||
import javax.persistence.Entity;
|
||||
import javax.persistence.EnumType;
|
||||
import javax.persistence.Enumerated;
|
||||
import javax.persistence.Id;
|
||||
import javax.persistence.ManyToOne;
|
||||
import javax.persistence.Table;
|
||||
import javax.persistence.Version;
|
||||
import java.sql.Timestamp;
|
||||
import java.time.LocalDate;
|
||||
|
||||
@Entity
|
||||
@Table(name = "orders")
|
||||
public class Order extends BaseModel {
|
||||
|
||||
public enum Status {
|
||||
NEW,
|
||||
APPROVED,
|
||||
SHIPPED,
|
||||
COMPLETE
|
||||
}
|
||||
|
||||
|
||||
@Enumerated(EnumType.STRING)
|
||||
Status status = Status.NEW;
|
||||
|
||||
LocalDate orderDate;
|
||||
|
||||
@ManyToOne(cascade = CascadeType.PERSIST)
|
||||
Customer customer;
|
||||
|
||||
public Status getStatus() {
|
||||
return status;
|
||||
}
|
||||
|
||||
public void setStatus(Status status) {
|
||||
this.status = status;
|
||||
}
|
||||
|
||||
public LocalDate getOrderDate() {
|
||||
return orderDate;
|
||||
}
|
||||
|
||||
public void setOrderDate(LocalDate orderDate) {
|
||||
this.orderDate = orderDate;
|
||||
}
|
||||
|
||||
public Customer getCustomer() {
|
||||
return customer;
|
||||
}
|
||||
|
||||
public void setCustomer(Customer customer) {
|
||||
this.customer = customer;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user