diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java index cd1782ad7..6f72febb9 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/querydefn/DefaultOrmQuery.java @@ -1441,6 +1441,10 @@ public class DefaultOrmQuery implements SpiQuery { @Override public Query fetch(String path, String properties, FetchConfig config) { + if (nativeSql != null && (config == null || config.isJoin())) { + // can't use fetch join with nativeSql (as the root query) + config = FETCH_QUERY; + } return fetchInternal(path, properties, config); } diff --git a/ebean-core/src/test/java/org/tests/query/TestQueryFindNative.java b/ebean-core/src/test/java/org/tests/query/TestQueryFindNative.java index 7cc4ac9c6..8e11d3328 100644 --- a/ebean-core/src/test/java/org/tests/query/TestQueryFindNative.java +++ b/ebean-core/src/test/java/org/tests/query/TestQueryFindNative.java @@ -2,6 +2,7 @@ package org.tests.query; import io.ebean.BaseTestCase; import io.ebean.DB; +import io.ebean.FetchConfig; import io.ebean.PagedList; import org.assertj.core.util.Lists; import org.ebeantest.LoggedSqlCollector; @@ -280,7 +281,7 @@ public class TestQueryFindNative extends BaseTestCase { LoggedSqlCollector.start(); List result = DB.findNative(Customer.class, sql) - .fetch("contacts") + .fetch("contacts", "firstName, lastName") .findList(); assertThat(result).isNotEmpty(); @@ -289,7 +290,7 @@ public class TestQueryFindNative extends BaseTestCase { if (isH2()) { assertThat(loggedSql).hasSize(2); assertThat(loggedSql.get(0)).contains("from o_customer"); - assertThat(loggedSql.get(1)).contains("from contact"); + assertThat(loggedSql.get(1)).contains("select t0.customer_id, t0.id, t0.first_name, t0.last_name from contact t0 where"); } } @@ -328,8 +329,9 @@ public class TestQueryFindNative extends BaseTestCase { LoggedSqlCollector.start(); List result = DB.findNative(Customer.class, sql) + // with nativeSql fetch (default) are converted to fetchQuery() .fetch("orders") - .fetch("contacts") + .fetch("contacts", FetchConfig.ofDefault()) .findList(); assertThat(result).isNotEmpty();