From 66fe278e3f7a0e51015fd89ddaeadeb9349c815f Mon Sep 17 00:00:00 2001 From: rob bygrave Date: Wed, 1 Nov 2017 23:03:57 +1300 Subject: [PATCH] #1192 - findNative() with @Embedded beans ... the embedded bean isn't loaded properly --- .../server/query/CQueryBuilder.java | 9 +++- .../nativesql/TestNativeWithEmbedded.java | 43 +++++++++++++++++++ 2 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 src/test/java/org/tests/rawsql/nativesql/TestNativeWithEmbedded.java diff --git a/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java b/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java index 71c30d744..42cb13d81 100644 --- a/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java +++ b/src/main/java/io/ebeaninternal/server/query/CQueryBuilder.java @@ -449,8 +449,13 @@ class CQueryBuilder { throw new PersistenceException(msg); } if (propertyName != null) { - String[] pathProp = SplitName.split(propertyName); - pathProps.addToPath(pathProp[0], pathProp[1]); + boolean assocProperty = el.isAssocProperty(); + if (!assocProperty) { + pathProps.addToPath(null, propertyName); + } else { + String[] pathProp = SplitName.split(propertyName); + pathProps.addToPath(pathProp[0], pathProp[1]); + } } } } diff --git a/src/test/java/org/tests/rawsql/nativesql/TestNativeWithEmbedded.java b/src/test/java/org/tests/rawsql/nativesql/TestNativeWithEmbedded.java new file mode 100644 index 000000000..42f7340b8 --- /dev/null +++ b/src/test/java/org/tests/rawsql/nativesql/TestNativeWithEmbedded.java @@ -0,0 +1,43 @@ +package org.tests.rawsql.nativesql; + +import io.ebean.BaseTestCase; +import io.ebean.Ebean; +import io.ebean.Query; +import org.ebeantest.LoggedSqlCollector; +import org.junit.Test; +import org.tests.model.embedded.EAddress; +import org.tests.model.embedded.EPerson; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; + +public class TestNativeWithEmbedded extends BaseTestCase { + + @Test + public void test() { + + EPerson person = new EPerson(); + person.setName("Frank"); + EAddress address = new EAddress(); + address.setStreet("1 foo st"); + address.setCity("barv"); + person.setAddress(address); + + Ebean.save(person); + + String sql = "select id, name, street, suburb, addr_city, addr_status from eperson where id = ?"; + + LoggedSqlCollector.start(); + + Query query = Ebean.findNative(EPerson.class, sql); + query.setParameter(1, person.getId()); + EPerson one = query.findOne(); + + assertThat(one.getName()).isEqualTo("Frank"); + assertThat(one.getAddress().getStreet()).isEqualTo("1 foo st"); + + List loggedSql = LoggedSqlCollector.stop(); + assertThat(loggedSql).hasSize(1); + } +}