Refactor tests, move some internal core tests to ebean-core

This commit is contained in:
Rob Bygrave
2022-03-27 17:06:52 +13:00
parent 785a027dd6
commit 2acdf2f4bf
10 changed files with 200 additions and 9 deletions
@@ -0,0 +1,358 @@
package io.ebeaninternal.server.core;
import io.ebean.DB;
import io.ebean.Database;
import io.ebean.FetchConfig;
import io.ebean.Query;
import io.ebeaninternal.server.querydefn.DefaultOrmQuery;
import io.ebeaninternal.server.querydefn.OrmQueryDetail;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Order;
import static org.assertj.core.api.Assertions.assertThat;
public class DefaultServer_createOrmQueryRequestTest {
Query<Order> query() {
return server().find(Order.class);
}
private Database server() {
return DB.getDefault();
}
OrmQueryRequest<Order> queryRequest(Query<Order> query) {
return OrmQueryRequestTestHelper.queryRequest(query);
}
OrmQueryDetail detail(Query<Order> query) {
return queryRequest(query).query().getDetail();
}
@Test
public void when_empty_then_same() {
assertSame(detail(query()), detail(query()));
}
@Test
public void select_all_then_same() {
assertSame(detail(query().select("*")), detail(query().select("*")));
}
@Test
public void when_propertiesInOrder_then_same() {
assertSame(detail(query().select("id,name")), detail(query().select("id,name")));
}
@Test
public void when_propertiesInDifferentOrder_then_different() {
assertDifferent(detail(query().select("id,name")), detail(query().select("name, id")));
// but same from autotune perspective
assertThat(detail(query().select("id,name")).isAutoTuneEqual(detail(query().select("name, id")))).isTrue();
}
@Test
public void when_additional_fetch_then_different() {
assertDifferent(detail(query().select("id,name")), detail(query().select("id,name").fetch("details")));
}
@Test
public void when_same_fetch_then_same() {
assertSame(detail(query().select("id,name").fetch("details")), detail(query().select("id,name").fetch("details")));
}
@Test
public void when_fetch_order_different_then_different() {
assertDifferent(detail(query().select("id,name").fetch("details").fetch("customer")),
detail(query().select("id,name").fetch("customer").fetch("details")));
}
@Test
public void when_extra_queryFetchToMany_then_same() {
assertDifferent(detail(query().select("id,name").fetch("customer")),
detail(query().select("id,name").fetch("customer").fetch("details", FetchConfig.ofQuery())));
}
@Test
public void when_extra_queryToOne_fetch_then_different() {
// with the fetch of customer the foreign key must be added to the root query
assertDifferent(detail(query().select("id,name")),
detail(query().select("id,name").fetch("customer", FetchConfig.ofQuery())));
}
@Test
public void when_additional_fetch_V2_then_different() {
assertDifferent(detail(query().select("id,name")), detail(query().select("id,name").fetch("customer", "id")));
}
@Test
public void when_fetchConfig_then_differentPlan() throws Exception {
DefaultOrmQuery<Order> query1 = (DefaultOrmQuery<Order>) DB.find(Order.class)
.select("status, shipDate")
.fetchQuery("details", "orderQty, unitPrice")
.fetch("details.product", "sku, name");
DefaultOrmQuery<Order> query2 = (DefaultOrmQuery<Order>) DB.find(Order.class)
.select("status, shipDate")
.fetch("details", "orderQty, unitPrice")
.fetch("details.product", "sku, name");
assertDifferent(detail(query1), detail(query2));
}
@Test
public void testJoinOrder_when_fetchJoins_expect_detailJoinsPreserveOrder() {
Query<Order> query = DB.find(Order.class)
.select("status, orderDate")
.fetch("customer", "name")
.fetch("details");
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer", "details");
}
@Test
public void testJoinOrder_when_fetchJoinsAndWhere_expect_fetchJoinsOnlyInFetchPaths() {
Query<Order> query = DB.find(Order.class)
.select("status, orderDate")
.fetch("details")
.where().eq("customer.name", "rob").query();
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("details");
}
@Test
public void testJoinOrder_when_queryFetch_expect_getFetchPaths_doesNotIncludeQueryJoin() {
Query<Order> query = DB.find(Order.class)
.select("status, orderDate")
.fetch("customer", "name")
.fetchQuery("details");
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer");
}
@Test
public void testJoinOrder_when_queryFetch_expect_getFetchPaths_doesNotIncludeQueryJoin_via_fetchQuery() {
Query<Order> query = DB.find(Order.class)
.select("status, orderDate")
.fetch("customer", "name")
.fetchQuery("details");
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer");
}
@Test
public void testJoinOrder_when_lazyFetch_expect_getFetchPaths_doesNotIncludeQueryJoin() {
Query<Order> query = DB.find(Order.class)
.select("status, orderDate")
.fetch("customer", "name")
.fetch("details", FetchConfig.ofLazy());
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer");
}
@Test
public void testJoinOrder_when_lazyFetch_expect_getFetchPaths_doesNotIncludeQueryJoin_via_fetchLazy() {
Query<Order> query = DB.find(Order.class)
.select("status, orderDate")
.fetch("customer", "name")
.fetchLazy("details");
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer");
}
@Test
public void testJoinOrder_when_lazyFetchAndHasChildren_expect_getFetchPaths_doesNotIncludeJoinOrChild() {
Query<Order> query = DB.find(Order.class)
.select("status, orderDate")
.fetch("customer", "name")
.fetchLazy("details")
.fetch("details.product");
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer");
}
@Test
public void testJoinOrder_when_fetchMany_expect_getFetchPaths_containsAllInOrder() {
Query<Order> query = DB.find(Order.class)
.select("status, orderDate")
.fetch("details")
.fetch("details.product")
.fetch("customer", "name");
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("details", "details.product", "customer");
}
@Test
public void testJoinOrder_when_queryJoin_expect_getFetchPaths_excludesQueryJoinAndChildren() {
Query<Order> query = DB.find(Order.class)
.select("status, orderDate")
.fetchQuery("details")
.fetch("details.product")
.fetch("customer", "name");
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer");
}
@Test
public void test_removeJoinToMany_when_multipleManyPaths() {
Query<Order> query = DB.find(Order.class)
.fetch("details")
.fetch("details.product")
.fetch("customer")
.fetch("customer.contacts"); // second many path
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("details", "details.product", "customer");
}
@Test
public void test_removeAllJoinToMany_when_firstRow() {
Query<Order> query = DB.find(Order.class)
.setFirstRow(1)
.fetch("details") // many path
.fetch("details.product")
.fetch("customer")
.fetch("customer.contacts"); // many path
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer");
}
@Test
public void test_removeAllJoinToMany_when_maxRows() {
Query<Order> query = DB.find(Order.class)
.setMaxRows(1)
.fetch("details") // many path
.fetch("details.product")
.fetch("customer")
.fetch("customer.contacts"); // many path
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer");
}
@Test
public void test_filterMany_included() {
Query<Order> query = DB.find(Order.class)
.fetch("details")
.fetch("details.product")
.fetch("customer")
.fetch("customer.contacts")
.filterMany("details").eq("orderQuantity", 10)
.query();
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("details", "details.product", "customer");
}
@Test
public void test_filterMany_excludedByOrdering() {
Query<Order> query = DB.find(Order.class)
.fetch("customer")
.fetch("customer.contacts")
.fetch("details")
.fetch("details.product")
.filterMany("details").eq("orderQuantity", 10)
.query();
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer", "customer.contacts");
}
@Test
public void test_filterMany_excludedExplicitly() {
Query<Order> query = DB.find(Order.class)
.fetchQuery("details")
.fetch("details.product")
.fetch("customer")
.fetch("customer.contacts")
.filterMany("details").eq("orderQuantity", 10)
.query();
OrmQueryRequest<Order> queryRequest = queryRequest(query);
OrmQueryDetail detail = queryRequest.query().getDetail();
assertThat(detail.getFetchPaths()).containsExactly("customer", "customer.contacts");
}
private void assertSame(OrmQueryDetail detail1, OrmQueryDetail detail2) {
assertThat(hash(detail1)).isEqualTo(hash(detail2));
}
private void assertDifferent(OrmQueryDetail detail1, OrmQueryDetail detail2) {
assertThat(hash(detail1)).isNotEqualTo(hash(detail2));
}
private String hash(OrmQueryDetail detail1) {
StringBuilder sb = new StringBuilder();
detail1.queryPlanHash(sb);
return sb.toString();
}
}
@@ -0,0 +1,18 @@
package io.ebeaninternal.server.core;
import io.ebean.DB;
import io.ebean.Query;
import io.ebeaninternal.api.SpiQuery;
public class OrmQueryRequestTestHelper {
static DefaultServer defaultServer = (DefaultServer) DB.getDefault();
/**
* Create and return a OrmQueryRequest for the given query.
*/
public static <T> OrmQueryRequest<T> queryRequest(Query<T> query) {
return (OrmQueryRequest<T>) defaultServer.createQueryRequest(SpiQuery.Type.LIST, query, null);
}
}
@@ -0,0 +1,168 @@
package io.ebeaninternal.server.core;
import io.ebean.DB;
import io.ebean.Database;
import io.ebean.ValuePair;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
import org.tests.model.basic.Order.Status;
import java.sql.Date;
import java.sql.Timestamp;
import java.util.Map;
import java.util.Set;
import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.*;
class TestDiffHelpSimple {
long firstTime = System.currentTimeMillis() - 10000;
long secondTime = System.currentTimeMillis();
Database server;
BeanDescriptor<Order> orderDesc;
TestDiffHelpSimple() {
server = DB.getDefault();
SpiEbeanServer spiServer = (SpiEbeanServer) server;
orderDesc = spiServer.descriptor(Order.class);
}
private Order createBaseOrder(Database server) {
Order order1 = new Order();
order1.setId(12);
order1.setCretime(new Timestamp(firstTime));
order1.setCustomer(server.reference(Customer.class, 1234));
order1.setStatus(Status.NEW);
order1.setShipDate(new Date(firstTime));
order1.setOrderDate(new Date(firstTime));
return order1;
}
@Test
void diffWhenNull_expect_empty() {
assertThat(DB.diff(null, null)).isEmpty();
}
@Test
void testBasicChanges() {
Order order1 = createBaseOrder(server);
Order order2 = new Order();
order2.setId(14);
order2.setCretime(new Timestamp(secondTime));
order2.setCustomer(server.reference(Customer.class, 2133));
order2.setStatus(Status.COMPLETE);
order2.setShipDate(new Date(secondTime));
order2.setOrderDate(new Date(secondTime));
Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc);
assertEquals(5, diff.size());
Set<String> keySet = diff.keySet();
assertTrue(keySet.contains("cretime"));
assertTrue(keySet.contains("status"));
assertTrue(keySet.contains("shipDate"));
assertTrue(keySet.contains("orderDate"));
assertTrue(keySet.contains("customer.id"));
}
@Test
void testBasicChanges_given_flatMode() {
Order order1 = createBaseOrder(server);
Order order2 = new Order();
order2.setId(14);
order2.setCretime(new Timestamp(secondTime));
order2.setCustomer(server.reference(Customer.class, 2133));
order2.setStatus(Status.COMPLETE);
order2.setShipDate(new Date(secondTime));
order2.setOrderDate(new Date(secondTime));
Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc);
assertEquals(5, diff.size());
Set<String> keySet = diff.keySet();
assertTrue(keySet.contains("cretime"));
assertTrue(keySet.contains("status"));
assertTrue(keySet.contains("shipDate"));
assertTrue(keySet.contains("orderDate"));
assertTrue(keySet.contains("customer.id"));
assertEquals(2133, diff.get("customer.id").getOldValue());
assertEquals(1234, diff.get("customer.id").getNewValue());
}
@Test
void testIdIgnored() {
Order order1 = createBaseOrder(server);
Order order2 = createBaseOrder(server);
order2.setId(14);
Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc);
assertEquals(0, diff.size());
}
@Test
void testSecondValueNull() {
Order order1 = createBaseOrder(server);
Order order2 = createBaseOrder(server);
order2.setCustomer(server.reference(Customer.class, 2133));
order2.setStatus(Status.COMPLETE);
order2.setShipDate(null);
Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc);
assertEquals(3, diff.size());
Set<String> keySet = diff.keySet();
assertTrue(keySet.contains("status"));
assertTrue(keySet.contains("customer.id"));
assertTrue(keySet.contains("shipDate"));
ValuePair shipDatePair = diff.get("shipDate");
assertEquals(order1.getShipDate(), shipDatePair.getNewValue());
assertEquals(order2.getShipDate(), shipDatePair.getOldValue());
assertNull(shipDatePair.getOldValue());
}
@Test
void testFirstValueNull() {
Order order1 = createBaseOrder(server);
order1.setShipDate(null);
Order order2 = createBaseOrder(server);
order2.setShipDate(new Date(secondTime));
Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc);
assertEquals(1, diff.size());
Set<String> keySet = diff.keySet();
assertTrue(keySet.contains("shipDate"));
ValuePair shipDatePair = diff.get("shipDate");
assertEquals(order1.getShipDate(), shipDatePair.getNewValue());
assertEquals(order2.getShipDate(), shipDatePair.getOldValue());
assertNull(shipDatePair.getNewValue());
}
@Test
void testBothNull() {
Order order1 = createBaseOrder(server);
order1.setShipDate(null);
Order order2 = createBaseOrder(server);
order2.setShipDate(null);
Map<String, ValuePair> diff = DiffHelp.diff(order1, order2, orderDesc);
assertEquals(0, diff.size());
}
}
@@ -0,0 +1,155 @@
package io.ebeaninternal.server.core;
import io.ebean.DB;
import io.ebean.Database;
import io.ebean.ValuePair;
import io.ebeaninternal.api.SpiEbeanServer;
import io.ebeaninternal.server.deploy.BeanDescriptor;
import org.junit.jupiter.api.Test;
import org.tests.model.embedded.EMain;
import org.tests.model.embedded.Eembeddable;
import java.util.Map;
import static org.junit.jupiter.api.Assertions.*;
public class TestDiffHelpWithEmbedded {
Database server;
BeanDescriptor<EMain> emainDesc;
public TestDiffHelpWithEmbedded() {
server = DB.getDefault();
SpiEbeanServer spiServer = (SpiEbeanServer) server;
emainDesc = spiServer.descriptor(EMain.class);
}
@Test
public void testChangeExistingEmbedded() {
EMain emain1 = createEMain();
EMain emain2 = createEMain();
emain2.getEmbeddable().setDescription("baz");
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
assertNotNull(valuePair);
assertEquals("bar", valuePair.getNewValue());
assertEquals("baz", valuePair.getOldValue());
}
/**
* Same result as testChangeExistingEmbedded.
*/
@Test
public void testSetViaNewEmbedded() {
EMain emain1 = createEMain();
EMain emain2 = createEMain();
Eembeddable embeddable = new Eembeddable();
embeddable.setDescription("baz");
emain2.setEmbeddable(embeddable);
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
assertNotNull(valuePair);
assertEquals("bar", valuePair.getNewValue());
assertEquals("baz", valuePair.getOldValue());
}
@Test
public void testDiffEmbedded_flatMode() {
EMain emain1 = createEMain();
EMain emain2 = createEMain();
emain2.getEmbeddable().setDescription("baz");
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
assertNotNull(valuePair);
assertEquals("bar", valuePair.getNewValue());
assertEquals("baz", valuePair.getOldValue());
}
@Test
public void testFirstEmbeddedIsNull() {
EMain emain1 = createEMain();
emain1.setEmbeddable(null);
EMain emain2 = createEMain();
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
assertNotNull(valuePair);
assertNull(valuePair.getNewValue());
assertEquals("bar", valuePair.getOldValue());
}
@Test
public void testSecondEmbeddedIsNull() {
EMain emain1 = createEMain();
EMain emain2 = createEMain();
emain2.setEmbeddable(null);
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
assertNotNull(valuePair);
assertNull(valuePair.getOldValue());
assertEquals("bar", valuePair.getNewValue());
}
@Test
public void testSecondEmbeddedIsNull_given_flatMode() {
EMain emain1 = createEMain();
EMain emain2 = createEMain();
emain2.setEmbeddable(null);
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
assertEquals(1, diff.size());
ValuePair valuePair = diff.get("embeddable.description");
assertNotNull(valuePair);
assertNull(valuePair.getOldValue());
assertEquals("bar", valuePair.getNewValue());
}
@Test
public void testBothEmbeddedIsNull() {
EMain emain1 = createEMain();
emain1.setEmbeddable(null);
EMain emain2 = createEMain();
emain2.setEmbeddable(null);
Map<String, ValuePair> diff = DiffHelp.diff(emain1, emain2, emainDesc);
assertEquals(0, diff.size());
}
private EMain createEMain() {
EMain emain = new EMain();
emain.setName("foo");
emain.setVersion(13L);
Eembeddable embeddable = new Eembeddable();
embeddable.setDescription("bar");
emain.setEmbeddable(embeddable);
return emain;
}
}
@@ -0,0 +1,14 @@
package io.ebeaninternal.server.deploy;
import io.ebean.DB;
import io.ebeaninternal.api.SpiEbeanServer;
public class BaseTest {
protected SpiEbeanServer server = (SpiEbeanServer)DB.getDefault();
protected <T> BeanDescriptor<T> getBeanDescriptor(Class<T> cls) {
return server.descriptor(cls);
}
}
@@ -0,0 +1,84 @@
package io.ebeaninternal.server.deploy;
import io.ebeanservice.docstore.api.mapping.DocPropertyAdapter;
import io.ebeanservice.docstore.api.mapping.DocPropertyMapping;
import io.ebeanservice.docstore.api.mapping.DocumentMapping;
import org.junit.jupiter.api.Test;
import org.tests.model.basic.Order;
import static org.assertj.core.api.Assertions.assertThat;
public class BeanDescriptor_documentMappingTest extends BaseTest {
@Test
public void docMapping() {
BeanDescriptor<Order> desc = getBeanDescriptor(Order.class);
DocumentMapping documentMapping = desc.docMapping();
DocPropertyMapping properties = documentMapping.getProperties();
assertThat(properties).isNotNull();
}
@Test
public void docMapping_visitor() {
BeanDescriptor<Order> desc = getBeanDescriptor(Order.class);
DocumentMapping documentMapping = desc.docMapping();
DocPropertyMapping properties = documentMapping.getProperties();
assertThat(properties).isNotNull();
TDVisitor tdVisitor = new TDVisitor();
documentMapping.visit(tdVisitor);
assertThat(tdVisitor.sb.toString()).isEqualTo("{status,orderDate,shipDate, object{customer:id,name,}customerName, nested{details: [id,orderQty,shipQty,unitPrice,cretime,updtime,]}cretime,updtime,}");
}
class TDVisitor extends DocPropertyAdapter {
StringBuilder sb = new StringBuilder();
@Override
public void visitProperty(DocPropertyMapping property) {
sb.append(property.getName() + ",");
}
@Override
public void visitBegin() {
sb.append("{");
}
@Override
public void visitEnd() {
sb.append("}");
}
@Override
public void visitBeginObject(DocPropertyMapping property) {
sb.append(" object{" + property.getName() + ":");
}
@Override
public void visitEndObject(DocPropertyMapping property) {
sb.append("}");
}
@Override
public void visitBeginList(DocPropertyMapping property) {
sb.append(" nested{" + property.getName() + ": [");
}
@Override
public void visitEndList(DocPropertyMapping property) {
sb.append("]}");
}
}
}
@@ -0,0 +1,88 @@
package org.tests.model.basic;
import io.ebean.annotation.EnumValue;
import io.ebean.annotation.Index;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.Size;
import java.sql.Timestamp;
@Entity
@Table(name = "e_basic")
public class EBasic {
public enum Status {
@EnumValue("N")
NEW,
@EnumValue("A")
ACTIVE,
@EnumValue("I")
INACTIVE,
}
@Id
Integer id;
Status status;
@Index
@Size(max=127)
String name;
String description;
Timestamp someDate;
public EBasic() {
}
public EBasic(String name) {
this.name = name;
}
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public Status getStatus() {
return status;
}
public void setStatus(Status status) {
this.status = status;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
public Timestamp getSomeDate() {
return someDate;
}
public void setSomeDate(Timestamp someDate) {
this.someDate = someDate;
}
}
@@ -0,0 +1,52 @@
package org.tests.model.embedded;
import javax.persistence.*;
@Entity
@Table(name = "e_main")
public class EMain {
@Id
private Integer id;
private String name;
@Embedded
private Eembeddable embeddable = new Eembeddable();
@Version
private Long version;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Eembeddable getEmbeddable() {
return embeddable;
}
public void setEmbeddable(Eembeddable embeddable) {
this.embeddable = embeddable;
}
public Long getVersion() {
return version;
}
public void setVersion(Long version) {
this.version = version;
}
}
@@ -0,0 +1,18 @@
package org.tests.model.embedded;
import javax.persistence.Embeddable;
@Embeddable
public class Eembeddable {
String description;
public String getDescription() {
return description;
}
public void setDescription(String description) {
this.description = description;
}
}