diff --git a/ebean-core/pom.xml b/ebean-core/pom.xml
index 94820c06d..c07b3062c 100644
--- a/ebean-core/pom.xml
+++ b/ebean-core/pom.xml
@@ -72,7 +72,7 @@
io.ebean
ebean-ddl-generator
- 12.6.1
+ 12.8.4a
test
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManySqlHelp.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManySqlHelp.java
index 398713a18..06a2a2145 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManySqlHelp.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/BeanPropertyAssocManySqlHelp.java
@@ -81,18 +81,18 @@ class BeanPropertyAssocManySqlHelp {
@Override
public void visitOneImported(BeanPropertyAssocOne> p) {
-
+ // do nothing
}
@Override
- public void visitScalar(BeanProperty p) {
+ public void visitScalar(BeanProperty p, boolean allowNonNull) {
sb.append(",").append(p.getDbColumn());
colCount++;
}
@Override
public void visitEnd() {
-
+ // do nothing
}
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/BaseTablePropertyVisitor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/BaseTablePropertyVisitor.java
index cc23a5c1f..e6741d12a 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/BaseTablePropertyVisitor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/BaseTablePropertyVisitor.java
@@ -44,9 +44,11 @@ public abstract class BaseTablePropertyVisitor implements BeanPropertyVisitor {
public abstract void visitOneImported(BeanPropertyAssocOne> p);
/**
- * Override this method for normal scalar property.
+ * Override this method for normal scalar property. With allowNonNull
+ * used with properties of Embedded beans that can only be Nonnull when
+ * the Embedded bean is Nonnull.
*/
@Override
- public abstract void visitScalar(BeanProperty p);
+ public abstract void visitScalar(BeanProperty p, boolean allowNonNull);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/BeanPropertyVisitor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/BeanPropertyVisitor.java
index 1cadc2b1b..dd0dd7c6e 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/BeanPropertyVisitor.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/BeanPropertyVisitor.java
@@ -40,8 +40,8 @@ public interface BeanPropertyVisitor {
void visitEmbeddedScalar(BeanProperty p, BeanPropertyAssocOne> embedded);
/**
- * Visit a scalar property.
+ * Visit a scalar property specify allowing non-null (e.g. embedded bean scalar properties).
*/
- void visitScalar(BeanProperty p);
+ void visitScalar(BeanProperty p, boolean allowNonNull);
}
diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/VisitProperties.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/VisitProperties.java
index deab1104c..5363b0add 100644
--- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/VisitProperties.java
+++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/visitor/VisitProperties.java
@@ -72,7 +72,7 @@ public class VisitProperties {
} else {
// simple scalar type
- pv.visitScalar(p);
+ pv.visitScalar(p, true);
}
}
diff --git a/ebean-core/src/test/java/org/tests/model/embedded/EEmbDatePeriod.java b/ebean-core/src/test/java/org/tests/model/embedded/EEmbDatePeriod.java
index 50cb225a3..2542a066b 100644
--- a/ebean-core/src/test/java/org/tests/model/embedded/EEmbDatePeriod.java
+++ b/ebean-core/src/test/java/org/tests/model/embedded/EEmbDatePeriod.java
@@ -1,12 +1,16 @@
package org.tests.model.embedded;
+import io.ebean.annotation.NotNull;
+
import javax.persistence.Embeddable;
import java.util.Date;
@Embeddable
public class EEmbDatePeriod {
+ @NotNull
Date date1;
+ @NotNull
Date date2;
public Date getDate1() {
diff --git a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/build/ModelBuildPropertyVisitor.java b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/build/ModelBuildPropertyVisitor.java
index 7b13cf581..3a7457a56 100644
--- a/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/build/ModelBuildPropertyVisitor.java
+++ b/ebean-ddl-generator/src/main/java/io/ebeaninternal/dbmigration/model/build/ModelBuildPropertyVisitor.java
@@ -175,7 +175,8 @@ public class ModelBuildPropertyVisitor extends BaseTablePropertyVisitor {
if (p instanceof BeanPropertyAssocOne) {
visitOneImported((BeanPropertyAssocOne>)p);
} else {
- visitScalar(p);
+ // only allow Nonnull if embedded is Nonnull
+ visitScalar(p, !embedded.isNullable());
}
if (embedded.isId()) {
// compound primary key
@@ -259,8 +260,7 @@ public class ModelBuildPropertyVisitor extends BaseTablePropertyVisitor {
}
@Override
- public void visitScalar(BeanProperty p) {
-
+ public void visitScalar(BeanProperty p, boolean allowNonNull) {
if (p.isSecondaryTable()) {
lastColumn = null;
return;
@@ -292,7 +292,7 @@ public class ModelBuildPropertyVisitor extends BaseTablePropertyVisitor {
}
} else {
col.setDefaultValue(p.getDbColumnDefault());
- if (!p.isNullable() || p.isDDLNotNull()) {
+ if (allowNonNull && (!p.isNullable() || p.isDDLNotNull())) {
col.setNotnull(true);
}
}