diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java index e105c46dd6..f70d6dcf21 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanDescriptor.java @@ -804,11 +804,9 @@ public Collection propertiesAll() { * Return the defaultSelectClause using FetchType.LAZY and FetchType.EAGER. */ public String getDefaultSelectClause() { - StringBuilder sb = new StringBuilder(); boolean hasLazyFetch = false; - for (DeployBeanProperty prop : propMap.values()) { if (!prop.isTransient() && !(prop instanceof DeployBeanPropertyAssocMany)) { if (prop.isFetchEager()) { diff --git a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java index 6527f51950..6797158b6c 100644 --- a/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java +++ b/ebean-core/src/main/java/io/ebeaninternal/server/deploy/meta/DeployBeanProperty.java @@ -617,6 +617,8 @@ public void setAggregation(String aggregation) { this.dbRead = true; this.dbInsertable = false; this.dbUpdateable = false; + // aggregation by default not fetchEager + this.fetchEager = false; } /** diff --git a/ebean-test/src/test/java/org/tests/aggregateformula/EWithLobAndAgg.java b/ebean-test/src/test/java/org/tests/aggregateformula/EWithLobAndAgg.java new file mode 100644 index 0000000000..784aaa3a84 --- /dev/null +++ b/ebean-test/src/test/java/org/tests/aggregateformula/EWithLobAndAgg.java @@ -0,0 +1,60 @@ +package org.tests.aggregateformula; + +import io.ebean.annotation.Aggregation; +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.Id; +import jakarta.persistence.Lob; + +@Entity +public class EWithLobAndAgg { + + @Id + long id; + + @Column + String name; + + @Lob + @Column + String description; + + @Aggregation("count(*)") + int count; + + public long id() { + return id; + } + + public EWithLobAndAgg setId(long id) { + this.id = id; + return this; + } + + public String name() { + return name; + } + + public EWithLobAndAgg setName(String name) { + this.name = name; + return this; + } + + public String description() { + return description; + } + + public EWithLobAndAgg setDescription(String description) { + this.description = description; + return this; + } + + public int count() { + return count; + } + + public EWithLobAndAgg setCount(int count) { + this.count = count; + return this; + } +} diff --git a/ebean-test/src/test/java/org/tests/aggregateformula/TestEWithLobAndAgg.java b/ebean-test/src/test/java/org/tests/aggregateformula/TestEWithLobAndAgg.java new file mode 100644 index 0000000000..eab219a54c --- /dev/null +++ b/ebean-test/src/test/java/org/tests/aggregateformula/TestEWithLobAndAgg.java @@ -0,0 +1,21 @@ +package org.tests.aggregateformula; + +import io.ebean.DB; +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class TestEWithLobAndAgg { + + @Test + void when_lobAndAgg_expect_neitherLobOrAggSelectedByDefault() { + var query = DB.find(EWithLobAndAgg.class); + + query.findList(); + var sql = query.getGeneratedSql(); + + assertThat(sql) + .describedAs("Neither Lob or Aggregation column in query") + .isEqualTo("select t0.id, t0.name from ewith_lob_and_agg t0"); + } +} diff --git a/ebean-test/src/test/java/org/tests/model/aggregation/TestAggregationTopLevel.java b/ebean-test/src/test/java/org/tests/model/aggregation/TestAggregationTopLevel.java index ffeaa7d504..10961a1e1a 100644 --- a/ebean-test/src/test/java/org/tests/model/aggregation/TestAggregationTopLevel.java +++ b/ebean-test/src/test/java/org/tests/model/aggregation/TestAggregationTopLevel.java @@ -29,7 +29,7 @@ public void query_noSelect() { .query(); List result = query.findList(); - assertThat(sqlOf(query)).contains("select t0.edate, t0.machine_id from d_machine_stats t0 where t0.edate > ?"); + assertThat(sqlOf(query)).contains("select t0.machine_id, t0.edate from d_machine_stats t0 where t0.edate > ?"); assertThat(result).isNotEmpty(); } diff --git a/ebean-test/src/test/java/org/tests/query/aggregation/TestAggregationCount.java b/ebean-test/src/test/java/org/tests/query/aggregation/TestAggregationCount.java index f4e2bc8edc..069b53ef0f 100644 --- a/ebean-test/src/test/java/org/tests/query/aggregation/TestAggregationCount.java +++ b/ebean-test/src/test/java/org/tests/query/aggregation/TestAggregationCount.java @@ -49,7 +49,7 @@ public void testBaseSelect() { List list = query.findList(); String sql = sqlOf(query, 5); - assertThat(sql).contains("select t0.id, t0.name, t0.status, t0.version, t0.event_id from tevent_one t0"); + assertThat(sql).contains("select t0.id, t0.name, t0.status, t0.event_id, t0.version from tevent_one t0"); for (TEventOne eventOne : list) { // lazy loading on Aggregation properties