From d9e884b8bd2297938e97c17e89f7a84aef338ef8 Mon Sep 17 00:00:00 2001 From: Rob Bygrave Date: Thu, 9 Feb 2017 23:27:13 +1300 Subject: [PATCH] #969 - ENH: Add Finder.query(String ormQuery) ... helper method --- src/main/java/io/ebean/EbeanServer.java | 8 ++++---- src/main/java/io/ebean/Finder.java | 7 +++++++ .../org/tests/model/basic/finder/CustomerFinder.java | 8 ++++++++ .../org/tests/query/finder/TestCustomerFinder.java | 11 +++++++++++ 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/src/main/java/io/ebean/EbeanServer.java b/src/main/java/io/ebean/EbeanServer.java index 45421246e..11c6ff5cd 100644 --- a/src/main/java/io/ebean/EbeanServer.java +++ b/src/main/java/io/ebean/EbeanServer.java @@ -232,9 +232,9 @@ public interface EbeanServer { * * // Find order additionally fetching the customer, details and details.product name. * - * String eql = "fetch customer fetch details fetch details.product (name) where id = :orderId "; + * String ormQuery = "fetch customer fetch details fetch details.product (name) where id = :orderId "; * - * Query query = Ebean.createQuery(Order.class, eql); + * Query query = Ebean.createQuery(Order.class, ormQuery); * query.setParameter("orderId", 2); * * Order order = query.findUnique(); @@ -251,11 +251,11 @@ public interface EbeanServer { * } * * @param beanType The type of bean to fetch - * @param eql The Ebean query + * @param ormQuery The Ebean ORM query * @param The type of the entity bean * @return The query with expressions defined as per the parsed query statement */ - Query createQuery(Class beanType, String eql); + Query createQuery(Class beanType, String ormQuery); /** * Create a query for a type of entity bean. diff --git a/src/main/java/io/ebean/Finder.java b/src/main/java/io/ebean/Finder.java index 64255d507..5efe0d50e 100644 --- a/src/main/java/io/ebean/Finder.java +++ b/src/main/java/io/ebean/Finder.java @@ -163,4 +163,11 @@ public class Finder { public Query nativeSql(String nativeSql) { return db().findNative(type, nativeSql); } + + /** + * Creates a query using the ORM query language. + */ + public Query query(String ormQuery) { + return db().createQuery(type, ormQuery); + } } diff --git a/src/test/java/org/tests/model/basic/finder/CustomerFinder.java b/src/test/java/org/tests/model/basic/finder/CustomerFinder.java index 6a326e278..83fede749 100644 --- a/src/test/java/org/tests/model/basic/finder/CustomerFinder.java +++ b/src/test/java/org/tests/model/basic/finder/CustomerFinder.java @@ -28,6 +28,14 @@ public class CustomerFinder extends Finder { return query().where().eq("name", name).findUnique(); } + public List byNameStatus(String nameStartsWith, Customer.Status status) { + + return query("where status = :status and name istartsWith :name order by name") + .setParameter("status", status) + .setParameter("name", nameStartsWith) + .findList(); + } + public List namesStartingWith(String name) { return nativeSql("select name from o_customer where name like ? order by name") diff --git a/src/test/java/org/tests/query/finder/TestCustomerFinder.java b/src/test/java/org/tests/query/finder/TestCustomerFinder.java index 38d0e4b41..6cfecf289 100644 --- a/src/test/java/org/tests/query/finder/TestCustomerFinder.java +++ b/src/test/java/org/tests/query/finder/TestCustomerFinder.java @@ -62,6 +62,17 @@ public class TestCustomerFinder extends BaseTestCase { assertThat(notThere).isNull(); } + @Test + public void test_ormQuery() { + + ResetBasicData.reset(); + + List customers = + Customer.find.byNameStatus("R", Customer.Status.NEW); + + assertThat(customers).isNotNull(); + } + @Test public void test_nativeSingleAttribute() {