diff --git a/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java b/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java index 078d36d81..b55dbecc2 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java +++ b/src/main/java/com/avaje/ebeaninternal/server/core/PersistRequestBean.java @@ -461,7 +461,7 @@ public final class PersistRequestBean extends PersistRequest implements BeanP public boolean isHardDeleteDraft() { if (type == Type.DELETE && beanDescriptor.isDraftable() && !beanDescriptor.isDraftableElement()) { // deleting a top level draftable bean - if (!beanDescriptor.isDraftInstance(entityBean)) { + if (beanDescriptor.isLiveInstance(entityBean)) { throw new PersistenceException("Explicit Delete is not allowed on a 'live' bean - only draft beans"); } return true; @@ -474,7 +474,7 @@ public final class PersistRequestBean extends PersistRequest implements BeanP * Save or Update is not allowed to execute using 'live' beans - must use publish(). */ public void checkDraft() { - if (beanDescriptor.isDraftable() && !beanDescriptor.isDraftInstance(entityBean)) { + if (beanDescriptor.isDraftable() && beanDescriptor.isLiveInstance(entityBean)) { throw new PersistenceException("Save or update is not allowed on a 'live' bean - only draft beans"); } } @@ -754,7 +754,9 @@ public final class PersistRequestBean extends PersistRequest implements BeanP intercept.setLoadedProperty(i); } beanDescriptor.setEmbeddedOwner(entityBean); - beanDescriptor.setDraft(entityBean); + if (!publish) { + beanDescriptor.setDraft(entityBean); + } } public boolean isReference() { diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java index 13f309a63..fe000ed93 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanDescriptor.java @@ -2024,14 +2024,25 @@ public class BeanDescriptor implements MetaBeanInfo, SpiBeanType { } /** - * Return true if the bean is considered a 'draft' instance. + * Return true if the bean is considered a 'draft' instance (not 'live'). */ public boolean isDraftInstance(EntityBean entityBean) { if (draft != null) { return Boolean.TRUE == draft.getValue(entityBean); } - // no draft property - so just ignore the check / return true - return true; + // no draft property - so return false + return false; + } + + /** + * Return true if the bean is draftable and considered a 'live' instance. + */ + public boolean isLiveInstance(EntityBean entityBean) { + if (draft != null) { + return Boolean.FALSE == draft.getValue(entityBean); + } + // no draft property - so return false + return false; } /**