diff --git a/ebean-api/src/main/java/io/ebean/ExpressionList.java b/ebean-api/src/main/java/io/ebean/ExpressionList.java index 827de6120..67ccda996 100644 --- a/ebean-api/src/main/java/io/ebean/ExpressionList.java +++ b/ebean-api/src/main/java/io/ebean/ExpressionList.java @@ -222,6 +222,8 @@ public interface ExpressionList { int delete(); /** + * @deprecated migrate to {@link #usingTransaction(Transaction)} then delete(). + *

* Execute as a delete query deleting the 'root level' beans that match the predicates * in the query. *

@@ -231,6 +233,7 @@ public interface ExpressionList { * * @return the number of rows that were deleted. */ + @Deprecated(forRemoval = true, since = "13.1.0") int delete(Transaction transaction); /** @@ -242,11 +245,14 @@ public interface ExpressionList { int update(); /** + * @deprecated migrate to {@link #usingTransaction(Transaction)} then update(). + *

* Execute as a update query with the given transaction. * * @return the number of rows that were updated. * @see UpdateQuery */ + @Deprecated(forRemoval = true, since = "13.1.0") int update(Transaction transaction); /** diff --git a/ebean-api/src/main/java/io/ebean/Query.java b/ebean-api/src/main/java/io/ebean/Query.java index f0d3c7d5a..016e9f17c 100644 --- a/ebean-api/src/main/java/io/ebean/Query.java +++ b/ebean-api/src/main/java/io/ebean/Query.java @@ -6,8 +6,7 @@ import io.avaje.lang.NonNullApi; * Object relational query for finding a List, Set, Map or single entity bean. *

* Example: Create the query using the API. - *

- *

+ * *

{@code
  *
  * List orderList = DB.find(Order.class)
@@ -18,11 +17,10 @@ import io.avaje.lang.NonNullApi;
  *     .setMaxRows(50)
  *     .findList();
  *
- * ...
  * }
*

* Example: The same query using the query language - *

+ * *
{@code
  *
  * String oql =
@@ -40,36 +38,32 @@ import io.avaje.lang.NonNullApi;
  * 

* Ebean has built in support for "AutoTune". This is a mechanism where a query * can be automatically tuned based on profiling information that is collected. - *

*

* This is effectively the same as automatically using select() and fetch() to * build a query that will fetch all the data required by the application and no * more. - *

*

* It is expected that AutoTune will be the default approach for many queries * in a system. It is possibly not as useful where the result of a query is sent * to a remote client or where there is some requirement for "Read Consistency" * guarantees. - *

+ * *

Query Language

*

* Partial Objects - *

*

* The find and fetch clauses support specifying a list of * properties to fetch. This results in objects that are "partially populated". * If you try to get a property that was not populated a "lazy loading" query * will automatically fire and load the rest of the properties of the bean (This * is very similar behaviour as a reference object being "lazy loaded"). - *

*

* Partial objects can be saved just like fully populated objects. If you do * this you should remember to include the "Version" property in the * initial fetch. If you do not include a version property then optimistic * concurrency checking will occur but only include the fetched properties. * Refer to "ALL Properties/Columns" mode of Optimistic Concurrency checking. - *

+ * *
{@code
  * [ select [ ( * | {fetch properties} ) ] ]
  * [ fetch {path} [ ( * | {fetch properties} ) ] ]
@@ -79,50 +73,39 @@ import io.avaje.lang.NonNullApi;
  * }
*

* SELECT [ ( * | {fetch properties} ) ] - *

*

* With the select you can specify a list of properties to fetch. - *

*

* FETCH {path} [ ( * | {fetch properties} ) ] - *

*

* With the fetch you specify the associated property to fetch and populate. The * path is a OneToOne, ManyToOne, OneToMany or ManyToMany property. - *

*

* For fetch of a path we can optionally specify a list of properties to fetch. * If you do not specify a list of properties ALL the properties for that bean * type are fetched. - *

*

* WHERE {list of predicates} - *

*

* The list of predicates which are joined by AND OR NOT ( and ). They can * include named (or positioned) bind parameters. These parameters will need to * be bound by {@link Query#setParameter(String, Object)}. - *

*

* ORDER BY {order by properties} - *

*

* The list of properties to order the result. You can include ASC (ascending) * and DESC (descending) in the order by clause. - *

*

* LIMIT {max rows} [ OFFSET {first row} ] - *

*

* The limit offset specifies the max rows and first row to fetch. The offset is * optional. - *

*

Examples of Ebean's Query Language

*

* Find orders fetching its id, shipDate and status properties. Note that the id * property is always fetched even if it is not included in the list of fetch * properties. - *

+ * *
{@code
  *
  * select (shipDate, status)
@@ -131,7 +114,7 @@ import io.avaje.lang.NonNullApi;
  * 

* Find orders with a named bind variable (that will need to be bound via * {@link Query#setParameter(String, Object)}). - *

+ * *
{@code
  *
  * where customer.name like :custLike
@@ -140,7 +123,7 @@ import io.avaje.lang.NonNullApi;
  * 

* Find orders and also fetch the customer with a named bind parameter. This * will fetch and populate both the order and customer objects. - *

+ * *
{@code
  *
  * fetch customer
@@ -154,7 +137,7 @@ import io.avaje.lang.NonNullApi;
  * objects will have their id, name and shipping address populated. The product
  * objects (associated with each order detail) will have their id, sku and name
  * populated.
- * 

+ * *
{@code
  *
  * fetch customer (name)
@@ -236,21 +219,26 @@ public interface Query extends CancelableQuery, QueryBuilder, T> {
   boolean isCountDistinct();
 
   /**
+   * @deprecated migrate to {@link #usingTransaction(Transaction)} then delete().
+   * 

* Execute as a delete query returning the number of rows deleted using the given transaction. *

* Note that if the query includes joins then the generated delete statement may not be * optimal depending on the database platform. - *

* * @return the number of beans/rows that were deleted. */ + @Deprecated(forRemoval = true, since = "14.1.0") int delete(Transaction transaction); /** + * @deprecated migrate to {@link #usingTransaction(Transaction)} then update(). + *

* Execute the UpdateQuery returning the number of rows updated using the given transaction. * * @return the number of beans/rows updated. */ + @Deprecated(forRemoval = true, since = "14.1.0") int update(Transaction transaction); /** @@ -327,7 +315,7 @@ public interface Query extends CancelableQuery, QueryBuilder, T> { *

* You can use this to have further control over the query. For example adding * fetch joins. - *

+ * *
{@code
    *
    * Order order = DB.find(Order.class)
@@ -384,19 +372,15 @@ public interface Query extends CancelableQuery, QueryBuilder, T> {
    * 

* This is currently ElasticSearch only and provides the full text * expressions such as Match and Multi-Match. - *

*

* This automatically makes this query a "Doc Store" query and will execute * against the document store (ElasticSearch). - *

*

* Expressions added here are added to the "query" section of an ElasticSearch * query rather than the "filter" section. - *

*

* Expressions added to the where() are added to the "filter" section of an * ElasticSearch query. - *

*/ ExpressionList text(); @@ -404,12 +388,12 @@ public interface Query extends CancelableQuery, QueryBuilder, T> { * This applies a filter on the 'many' property list rather than the root * level objects. *

- * Typically you will use this in a scenario where the cardinality is high on + * Typically, you will use this in a scenario where the cardinality is high on * the 'many' property you wish to join to. Say you want to fetch customers * and their associated orders... but instead of getting all the orders for * each customer you only want to get the new orders they placed since last * week. In this case you can use filterMany() to filter the orders. - *

+ * *
{@code
    *
    * List list = DB.find(Customer.class)
@@ -423,7 +407,6 @@ public interface Query extends CancelableQuery, QueryBuilder, T> {
    * Please note you have to be careful that you add expressions to the correct
    * expression list - as there is one for the 'root level' and one for each
    * filterMany that you have.
-   * 

* * @param propertyName the name of the many property that you want to have a filter on. * @return the expression list that you add filter expressions for the many to. @@ -434,11 +417,9 @@ public interface Query extends CancelableQuery, QueryBuilder, T> { * Add Expressions to the Having clause return the ExpressionList. *

* Currently only beans based on raw sql will use the having clause. - *

*

* Note that this returns the ExpressionList (so you can add multiple * expressions to the query in a fluent API way). - *

* * @return The ExpressionList for adding more expressions to. * @see Expr @@ -449,12 +430,10 @@ public interface Query extends CancelableQuery, QueryBuilder, T> { * Add an expression to the having clause returning the query. *

* Currently only beans based on raw sql will use the having clause. - *

*

* This is similar to {@link #having()} except it returns the query rather * than the ExpressionList. This is useful when you want to further specify * something on the query. - *

* * @param addExpressionToHaving the expression to add to the having clause. * @return the Query object diff --git a/ebean-test/src/test/java/io/ebean/xtest/base/UpdateQueryTest.java b/ebean-test/src/test/java/io/ebean/xtest/base/UpdateQueryTest.java index 1b44e44b2..9ad14fd33 100644 --- a/ebean-test/src/test/java/io/ebean/xtest/base/UpdateQueryTest.java +++ b/ebean-test/src/test/java/io/ebean/xtest/base/UpdateQueryTest.java @@ -356,7 +356,7 @@ public class UpdateQueryTest extends BaseTestCase { .setRaw("status = coalesce(status, ?)", Customer.Status.ACTIVE) .where() .gt("id", 10000) - .update(transaction); + .update(transaction); // .usingTransaction(transaction).update(); rowsQuery = server .update(Customer.class)