From adfe5f03057b550fb40249e191dd45d0c0778142 Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Mon, 29 Aug 2016 17:05:33 +0200 Subject: [PATCH] FIX: Bean did not get dirty when modified with ExpressionPath.pathSet --- .../server/deploy/BeanProperty.java | 2 +- .../ebean/plugin/ExpressionPathTest.java | 43 +++++++++++++++++++ .../com/avaje/tests/model/basic/Order.java | 2 +- 3 files changed, 45 insertions(+), 2 deletions(-) diff --git a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java index 6d7bc7f2b..965b7b775 100644 --- a/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java +++ b/src/main/java/com/avaje/ebeaninternal/server/deploy/BeanProperty.java @@ -798,7 +798,7 @@ public class BeanProperty implements ElPropertyValue, Property { if (bean != null) { Object logicalVal = convertToLogicalType(value); - setValue((EntityBean) bean, logicalVal); + setValueIntercept((EntityBean) bean, logicalVal); } } diff --git a/src/test/java/com/avaje/ebean/plugin/ExpressionPathTest.java b/src/test/java/com/avaje/ebean/plugin/ExpressionPathTest.java index 809e92200..e2e037db2 100644 --- a/src/test/java/com/avaje/ebean/plugin/ExpressionPathTest.java +++ b/src/test/java/com/avaje/ebean/plugin/ExpressionPathTest.java @@ -2,6 +2,7 @@ package com.avaje.ebean.plugin; import com.avaje.ebean.Ebean; import com.avaje.ebean.EbeanServer; +import com.avaje.tests.model.basic.Customer; import com.avaje.tests.model.basic.Order; import org.junit.Test; @@ -76,4 +77,46 @@ public class ExpressionPathTest { assertThat(order.getCustomer().getName()).isEqualTo("Rob"); } + @Test + public void test_dirty() throws Exception { + + + BeanType customerBeanType = beanType(Customer.class); + BeanType orderBeanType = beanType(Order.class); + + + Customer customer = new Customer(); + customer.setName("foo"); + server.save(customer); + + customer = server.find(Customer.class, customer.getId()); + assertThat(customer.getName()).isEqualTo("foo"); + + customerBeanType.getExpressionPath("name").pathSet(customer, "bar"); + server.save(customer); + + customer = server.find(Customer.class, customer.getId()); + assertThat(customer.getName()).isEqualTo("bar"); + + + Order order = new Order(); + order.setCustomer(customer); + + server.save(order); + + order = server.find(Order.class, order.getId()); + + ExpressionPath customerNamePath = orderBeanType.getExpressionPath("customer.name"); + assertThat(customerNamePath.pathGet(order)).isEqualTo("bar"); + + customerNamePath.pathSet(order, "baz"); + server.save(order); + + order = server.find(Order.class, order.getId()); + assertThat(order.getCustomer().getName()).isEqualTo("baz"); + + + + } + } \ No newline at end of file diff --git a/src/test/java/com/avaje/tests/model/basic/Order.java b/src/test/java/com/avaje/tests/model/basic/Order.java index fc94f160c..98e7cb722 100644 --- a/src/test/java/com/avaje/tests/model/basic/Order.java +++ b/src/test/java/com/avaje/tests/model/basic/Order.java @@ -86,7 +86,7 @@ public class Order implements Serializable { Date shipDate; @NotNull - @ManyToOne + @ManyToOne(cascade = CascadeType.PERSIST) @JoinColumn(name = "kcustomer_id") @DocEmbedded(doc = "id,name") Customer customer;