From b2e8e628fafae5c3bdb196be5154081007f509dd Mon Sep 17 00:00:00 2001 From: Roland Praml Date: Fri, 13 Jan 2023 13:06:54 +0100 Subject: [PATCH] BUG: @OrderBy on chained properties do not work with distinct (testcase) --- .../org/tests/model/basic/EBasicTree.java | 59 +++++++++++++++++++ .../orderby/TestOrderByWithDistinct.java | 14 +++++ 2 files changed, 73 insertions(+) create mode 100644 ebean-test/src/test/java/org/tests/model/basic/EBasicTree.java diff --git a/ebean-test/src/test/java/org/tests/model/basic/EBasicTree.java b/ebean-test/src/test/java/org/tests/model/basic/EBasicTree.java new file mode 100644 index 000000000..eaefd65fb --- /dev/null +++ b/ebean-test/src/test/java/org/tests/model/basic/EBasicTree.java @@ -0,0 +1,59 @@ +package org.tests.model.basic; + +import javax.persistence.Entity; +import javax.persistence.Id; +import javax.persistence.ManyToOne; +import javax.persistence.OneToMany; +import javax.persistence.OrderBy; +import javax.persistence.Table; +import java.util.List; + +@Entity +@Table(name = "e_basic_tree") +public class EBasicTree { + + @Id + private int id; + + @ManyToOne + private EBasicTree parent; + + @OneToMany + @OrderBy("ref.name") + private List children; + + @ManyToOne + private EBasic ref; + + public int getId() { + return id; + } + + public void setId(int id) { + this.id = id; + } + + public EBasicTree getParent() { + return parent; + } + + public void setParent(EBasicTree parent) { + this.parent = parent; + } + + public List getChildren() { + return children; + } + + public void setChildren(List children) { + this.children = children; + } + + public EBasic getRef() { + return ref; + } + + public void setRef(EBasic ref) { + this.ref = ref; + } +} diff --git a/ebean-test/src/test/java/org/tests/query/orderby/TestOrderByWithDistinct.java b/ebean-test/src/test/java/org/tests/query/orderby/TestOrderByWithDistinct.java index 8e6d13893..ef9464462 100644 --- a/ebean-test/src/test/java/org/tests/query/orderby/TestOrderByWithDistinct.java +++ b/ebean-test/src/test/java/org/tests/query/orderby/TestOrderByWithDistinct.java @@ -57,7 +57,21 @@ public class TestOrderByWithDistinct extends BaseTestCase { } + @Test + public void testOrderByOnPropWithDistinct() { + Query query = DB.find(EBasicTree.class) + .fetch("children") + .where().eq("children.ref.status", EBasic.Status.ACTIVE).query(); + query.findList(); + // we expect t2.name in this query + assertSql(query).startsWith("select distinct t0.id, t0.parent_id, t0.ref_id, t1.id, t1.parent_id, t1.ref_id, t2.name " + + "from e_basic_tree t0 " + + "left join e_basic_tree t1 on t1.parent_id = t0.id " + + "join e_basic_tree u1 on u1.parent_id = t0.id " + + "join e_basic u2 on u2.id = u1.ref_id left " + + "join e_basic t2 on t2.id = t1.ref_id where u2.status = ? order by t0.id, t2.name"); + } @Test public void testOrderByWithDistinct() { Query query = DB.find(MUser.class);