#210 - ENH: Add Query.setLazyLoadBatch(int size) method ... for per query control

This commit is contained in:
rbygrave
2014-11-26 20:13:30 +13:00
parent 1cd31e13b9
commit 478053263f
18 changed files with 239 additions and 112 deletions
@@ -1,35 +1,30 @@
package com.avaje.tests.query;
import java.util.List;
import org.junit.Assert;
import org.junit.Test;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.Expr;
import com.avaje.ebean.Junction;
import com.avaje.ebean.Query;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;
import org.junit.Assert;
import org.junit.Test;
import java.util.List;
public class TestLimitQuery extends BaseTestCase {
@Test
public void testHasManyWithLimit() {
ResetBasicData.reset();
Query<Customer> query = Ebean.find(Customer.class);
query.setAutofetch(false);
query.setFirstRow(0);
query.setMaxRows(10);
List<Customer> customers = Ebean.find(Customer.class)
.setAutofetch(false)
.setFirstRow(0)
.setMaxRows(10)
.where().like("name", "%A%")
.findList();
Junction<Customer> junc = Expr.disjunction(query);
junc.add(Expr.like("name", "%A%"));
query.where(junc);
// should at least find the "Cust NoAddress" customer
Assert.assertTrue(customers.size() > 0);
List<Customer> customer = query.findList();
Assert.assertTrue(customer.size() > 0); // should at least find the
// "Cust NoAddress" customer
}
}
@@ -0,0 +1,111 @@
package com.avaje.tests.query.lazy;
import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.QueryEachConsumer;
import com.avaje.ebean.config.ServerConfig;
import com.avaje.tests.model.basic.*;
import org.junit.Test;
import java.util.List;
public class TestQueryDefaultBatchSize extends BaseTestCase {
@Test
public void test_findEach() {
ResetBasicData.reset();
Ebean.find(Order.class)
.setLazyLoadBatchSize(2)
.findEach(new QueryEachConsumer<Order>() {
@Override
public void accept(Order bean) {
doStuff(bean);
}
});
}
@Test
public void test_findEach_withFetch() {
ResetBasicData.reset();
Ebean.find(Order.class)
.fetch("details", "id")
.fetch("details.product", "sku")
.fetch("customer")
.fetch("customer.contacts")
.setLazyLoadBatchSize(2)
.findEach(new QueryEachConsumer<Order>() {
@Override
public void accept(Order bean) {
doStuff(bean);
}
});
}
@Test
public void test_findList() {
ResetBasicData.reset();
List<Order> orders =
Ebean.find(Order.class)
.setLazyLoadBatchSize(2)
.findList();
for (Order order : orders) {
doStuff(order);
}
}
@Test
public void test_findList_withFetch() {
ResetBasicData.reset();
List<Order> orders =
Ebean.find(Order.class)
.fetch("details", "id")
.fetch("details.product", "sku")
.fetch("customer")
.fetch("customer.contacts")
.setLazyLoadBatchSize(2)
.findList();
for (Order order : orders) {
doStuff(order);
}
new ServerConfig().setLazyLoadBatchSize();
}
@Test
public void test_findList_lazyMany() {
ResetBasicData.reset();
List<Order> orders = Ebean.find(Order.class)
.setLazyLoadBatchSize(100)
.findList();
for (Order order : orders) {
List<OrderDetail> details = order.getDetails();
details.size();
for (OrderDetail detail : details) {
Product product = detail.getProduct();
product.getSku();
}
}
}
private void doStuff(Order order) {
// invoke lazy loading
Customer customer = order.getCustomer();
System.out.println("do stuff: order:"+order.getId());
System.out.println("... customer:"+customer.getName());
System.out.println("... contacts: "+customer.getContacts().size()+" details:"+order.getDetails().size());
}
}