package org.tests.persistencecontext;
import io.ebean.BaseTestCase;
import io.ebean.Ebean;
import org.tests.model.basic.Customer;
import org.tests.model.basic.Order;
import org.tests.model.basic.ResetBasicData;
import org.junit.Test;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static io.ebean.PersistenceContextScope.QUERY;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertTrue;
public class TestPersistenceContextScopeUsingOrders extends BaseTestCase {
@Test
public void test_persistenceContextScopeQuery() {
ResetBasicData.reset();
List<Order> orders = Ebean.find(Order.class)
// Use QUERY or TRANSACTION scope (just not NONE)
.setPersistenceContextScope(QUERY)
.fetch("customer", "id, name")
.where().istartsWith("customer.name", "rob").eq("customer.id", 1)
.orderBy().asc("customer.name")
.findList();
assertTrue(!orders.isEmpty());
// collect the customer instances
List<Customer> customers = new ArrayList<>();
Set<Integer> identities = new HashSet<>();
for (Order order : orders) {
Customer customer = order.getCustomer();
identities.add(System.identityHashCode(customer));
customers.add(customer);
}
// only one instance of Customer this time ...
assertEquals(1, identities.size());
assertTrue(customers.size() > 1);
}
}