#469 - Embedded bean made dirty after a prior insert does not trigger dirty state on 'outer' bean

This commit is contained in:
Robin Bygrave
2015-11-27 18:19:59 +13:00
parent a578eda2b1
commit 6450ba219c
4 changed files with 49 additions and 4 deletions
@@ -691,6 +691,7 @@ public final class PersistRequestBean<T> extends PersistRequest implements BeanP
for (int i = 0; i < len; i++) {
intercept.setLoadedProperty(i);
}
beanDescriptor.setEmbeddedOwner(entityBean);
}
public boolean isReference() {
@@ -2051,6 +2051,15 @@ public class BeanDescriptor<T> implements MetaBeanInfo, SpiBeanType<T> {
return propertiesEmbedded;
}
/**
* Set the embedded owner on any embedded bean properties.
*/
public void setEmbeddedOwner(EntityBean bean) {
for (int i = 0; i < propertiesEmbedded.length; i++) {
propertiesEmbedded[i].setEmbeddedOwner(bean);
}
}
public BeanProperty getIdProperty() {
return idProperty;
}
@@ -578,17 +578,30 @@ public class BeanPropertyAssocOne<T> extends BeanPropertyAssoc<T> {
public void setValue(EntityBean bean, Object value) {
super.setValue(bean, value);
if (embedded && value instanceof EntityBean) {
EntityBean embedded = (EntityBean) value;
embedded._ebean_getIntercept().setEmbeddedOwner(bean, propertyIndex);
setEmbeddedOwner(bean, value);
}
}
/**
* Set the owner on the embedded bean property.
*/
public void setEmbeddedOwner(EntityBean owner) {
Object emb = getValue(owner);
if (emb != null) {
setEmbeddedOwner(owner, emb);
}
}
private void setEmbeddedOwner(EntityBean bean, Object value) {
((EntityBean)value)._ebean_getIntercept().setEmbeddedOwner(bean, propertyIndex);
}
@Override
public void setValueIntercept(EntityBean bean, Object value) {
super.setValueIntercept(bean, value);
if (embedded && value instanceof EntityBean) {
EntityBean embedded = (EntityBean) value;
embedded._ebean_getIntercept().setEmbeddedOwner(bean, propertyIndex);
setEmbeddedOwner(bean, value);
}
}