diff --git a/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java b/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java index a60e59a2d..af6e7b9e4 100644 --- a/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java +++ b/src/main/java/io/ebeaninternal/server/deploy/BeanEmbeddedMetaFactory.java @@ -58,7 +58,7 @@ class BeanEmbeddedMetaFactory { } private static boolean dbNullable(Column override, BeanProperty source) { - return (override != null && !override.nullable()) ? override.nullable() : source.isNullable(); + return (override != null) ? override.nullable() : source.isNullable(); } private static int dbLength(Column override, BeanProperty source) { diff --git a/src/test/ddl-review/h2-create-all.sql b/src/test/ddl-review/h2-create-all.sql index c0a944050..b155ddca0 100644 --- a/src/test/ddl-review/h2-create-all.sql +++ b/src/test/ddl-review/h2-create-all.sql @@ -1,4 +1,4 @@ --- Generated by ebean unknown at 2020-08-24T21:46:04.720412Z +-- Generated by ebean unknown at 2020-08-31T02:36:16.679053Z create table asimple_bean ( id bigint generated by default as identity not null, name varchar(255), @@ -1341,11 +1341,11 @@ create table einvoice ( invoice_date timestamp, state integer, person_id bigint, - ship_street varchar(255), + ship_street varchar(255) not null, ship_suburb varchar(255), ship_city varchar(255), ship_status varchar(3), - bill_street varchar(255), + bill_street varchar(255) not null, bill_suburb varchar(255), bill_city varchar(255), bill_status varchar(3), @@ -1421,7 +1421,7 @@ create table eperson ( id bigint generated by default as identity not null, name varchar(255), notes varchar(255), - street varchar(255), + street varchar(255) not null, suburb varchar(255), addr_city varchar(255), addr_status varchar(3), @@ -1443,6 +1443,18 @@ create table eperson2 ( constraint pk_eperson2 primary key (id) ); +create table eperson3 ( + id bigint generated by default as identity not null, + name varchar(255), + street varchar(255), + suburb varchar(255), + city varchar(255), + status varchar(3), + version bigint not null, + constraint ck_eperson3_status check ( status in ('ONE','TWO')), + constraint pk_eperson3 primary key (id) +); + create table e_person_online ( id bigint generated by default as identity not null, email varchar(127), diff --git a/src/test/java/org/tests/embedded/TestEmbeddedEmpty.java b/src/test/java/org/tests/embedded/TestEmbeddedEmpty.java index 7af595977..eda307b53 100644 --- a/src/test/java/org/tests/embedded/TestEmbeddedEmpty.java +++ b/src/test/java/org/tests/embedded/TestEmbeddedEmpty.java @@ -1,23 +1,21 @@ package org.tests.embedded; -import io.ebean.Ebean; +import io.ebean.DB; import org.junit.Test; import org.tests.model.embedded.EAddress; import org.tests.model.embedded.EAddressStatus; -import org.tests.model.embedded.EPerson; +import org.tests.model.embedded.EPerson3; public class TestEmbeddedEmpty { @Test public void insertEmptyEmbedded() { - EPerson person = new EPerson(); + EPerson3 person = new EPerson3(); person.setName("with empty embedded"); - // set empty embedded bean person.setAddress(new EAddress()); - - Ebean.save(person); + DB.save(person); // treat all embedded properties as loaded person.getAddress().getCity(); @@ -28,7 +26,7 @@ public class TestEmbeddedEmpty { EAddressStatus.TWO.doIt(); - Ebean.find(EPerson.class) + DB.find(EPerson3.class) .where().eq("address.status", EAddressStatus.TWO) .findList(); diff --git a/src/test/java/org/tests/model/embedded/EAddress.java b/src/test/java/org/tests/model/embedded/EAddress.java index 412a8a493..86911152b 100644 --- a/src/test/java/org/tests/model/embedded/EAddress.java +++ b/src/test/java/org/tests/model/embedded/EAddress.java @@ -1,5 +1,6 @@ package org.tests.model.embedded; +import javax.persistence.Column; import javax.persistence.Embeddable; import javax.persistence.EnumType; import javax.persistence.Enumerated; @@ -7,6 +8,7 @@ import javax.persistence.Enumerated; @Embeddable public class EAddress { + @Column(nullable = false) String street; String suburb; diff --git a/src/test/java/org/tests/model/embedded/EPerson3.java b/src/test/java/org/tests/model/embedded/EPerson3.java new file mode 100644 index 000000000..78c87ab9b --- /dev/null +++ b/src/test/java/org/tests/model/embedded/EPerson3.java @@ -0,0 +1,60 @@ +package org.tests.model.embedded; + +import javax.persistence.AttributeOverride; +import javax.persistence.AttributeOverrides; +import javax.persistence.Column; +import javax.persistence.Embedded; +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.Version; + +@Entity +public class EPerson3 { + + @Id + long id; + + @Version + long version; + + String name; + + @Embedded + @AttributeOverrides({ + @AttributeOverride(name = "street", column = @Column()) + }) + EAddress address; + + public long getId() { + return id; + } + + public void setId(long id) { + this.id = id; + } + + public long getVersion() { + return version; + } + + public void setVersion(long version) { + this.version = version; + } + + public String getName() { + return name; + } + + public void setName(String name) { + this.name = name; + } + + public EAddress getAddress() { + return address; + } + + public void setAddress(EAddress address) { + this.address = address; + } + +}