From a447361ea0db34fa51c40bf8f402f24795924a9a Mon Sep 17 00:00:00 2001 From: rbygrave Date: Thu, 5 Feb 2015 00:06:03 +1300 Subject: [PATCH] #238 - Potential fix for stackOverflow error / recursion issue --- .../java/com/avaje/ebean/bean/EntityBeanIntercept.java | 8 ++------ .../ebeaninternal/server/deploy/BeanPropertyAssocOne.java | 4 ++-- .../basic/xtra/TestInsertBatchThenFlushThenUpdate.java | 3 +-- 3 files changed, 5 insertions(+), 10 deletions(-) diff --git a/src/main/java/com/avaje/ebean/bean/EntityBeanIntercept.java b/src/main/java/com/avaje/ebean/bean/EntityBeanIntercept.java index 70001b123..c662552a3 100644 --- a/src/main/java/com/avaje/ebean/bean/EntityBeanIntercept.java +++ b/src/main/java/com/avaje/ebean/bean/EntityBeanIntercept.java @@ -47,9 +47,6 @@ public final class EntityBeanIntercept implements Serializable { */ private EntityBean owner; - /** - * The parent bean by relationship (1-1 or 1-M). - */ private EntityBean embeddedOwner; private int embeddedOwnerIndex; @@ -175,7 +172,7 @@ public final class EntityBeanIntercept implements Serializable { } /** - * Return the parent bean (by relationship). + * Return the owning bean for an embedded bean. */ public Object getEmbeddedOwner() { return embeddedOwner; @@ -189,8 +186,7 @@ public final class EntityBeanIntercept implements Serializable { } /** - * Special case for a OneToOne, Set the parent bean (by relationship). This is - * the owner of a 1-1. + * Set the embedded beans owning bean. */ public void setEmbeddedOwner(EntityBean parentBean, int embeddedOwnerIndex) { this.embeddedOwner = parentBean; diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocOne.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocOne.java index dcdc0bbe4..aa41d3c10 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocOne.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanPropertyAssocOne.java @@ -519,7 +519,7 @@ public class BeanPropertyAssocOne extends BeanPropertyAssoc { @Override public void setValue(EntityBean bean, Object value) { super.setValue(bean, value); - if (value instanceof EntityBean) { + if (embedded && value instanceof EntityBean) { EntityBean embedded = (EntityBean)value; embedded._ebean_getIntercept().setEmbeddedOwner(bean, propertyIndex); } @@ -528,7 +528,7 @@ public class BeanPropertyAssocOne extends BeanPropertyAssoc { @Override public void setValueIntercept(EntityBean bean, Object value) { super.setValueIntercept(bean, value); - if (value instanceof EntityBean) { + if (embedded && value instanceof EntityBean) { EntityBean embedded = (EntityBean)value; embedded._ebean_getIntercept().setEmbeddedOwner(bean, propertyIndex); } diff --git a/src/test/java/com/avaje/tests/model/basic/xtra/TestInsertBatchThenFlushThenUpdate.java b/src/test/java/com/avaje/tests/model/basic/xtra/TestInsertBatchThenFlushThenUpdate.java index b0214727b..fb9c0ece5 100644 --- a/src/test/java/com/avaje/tests/model/basic/xtra/TestInsertBatchThenFlushThenUpdate.java +++ b/src/test/java/com/avaje/tests/model/basic/xtra/TestInsertBatchThenFlushThenUpdate.java @@ -53,9 +53,8 @@ public class TestInsertBatchThenFlushThenUpdate extends BaseTestCase { // insert statements for EdExtendedParent List loggedSql2 = LoggedSqlCollector.start(); - assertEquals(2, loggedSql2.size()); + assertEquals(1, loggedSql2.size()); assertTrue(loggedSql2.get(0).contains(" update td_parent ")); - assertTrue(loggedSql2.get(1).contains(" update td_child ")); } finally { Ebean.endTransaction();