Package com.avaje.ebeaninternal.server.autofetch

Source Code of com.avaje.ebeaninternal.server.autofetch.TunedQueryWithNullFetchedBeanTest

package com.avaje.ebeaninternal.server.autofetch;

import java.util.List;
import java.util.Set;

import org.avaje.ebeantest.LoggedSqlCollector;
import org.junit.Assert;
import org.junit.Test;

import com.avaje.ebean.BaseTestCase;
import com.avaje.ebean.Ebean;
import com.avaje.ebean.EbeanServer;
import com.avaje.ebean.Query;
import com.avaje.ebean.bean.EntityBean;
import com.avaje.ebean.bean.EntityBeanIntercept;
import com.avaje.tests.model.basic.Address;
import com.avaje.tests.model.basic.Customer;
import com.avaje.tests.model.basic.ResetBasicData;

public class TunedQueryWithNullFetchedBeanTest extends BaseTestCase {

  EbeanServer server = Ebean.getServer(null);
 
  @Test
  public void withFetchOfNullBeanJoin() {
   
    ResetBasicData.reset();
   
    Customer newCustomer = new Customer();
    newCustomer.setName("TestFetchBillingAddress");
    server.save(newCustomer);
     
    Query<Customer> query = server.find(Customer.class)
        .setId(newCustomer.getId())
        .fetch("billingAddress","id");
       
    LoggedSqlCollector.start();
   
    Customer customer = query.findUnique();
    EntityBean eb = (EntityBean)customer;
    EntityBeanIntercept ebi = eb._ebean_getIntercept();
   
    Assert.assertTrue(ebi.isFullyLoadedBean());
   
    // find the internal property index for "billingAddress"
    String[] propNames = eb._ebean_getPropertyNames();
    int pos = 0;
    for (int i = 0; i < propNames.length; i++) {
      if (propNames[i].equals("billingAddress")) {
        pos = i;
      }
    }
   
    // The billing address is loaded (but value null)
    Assert.assertTrue(ebi.isLoadedProperty(pos));
   
    Set<String> loadedPropertyNames = ebi.getLoadedPropertyNames();
    Assert.assertNull(loadedPropertyNames);
   
    // no lazy loading expected here, value is null
    Address billingAddress = customer.getBillingAddress();
    Assert.assertNull(billingAddress);
   
    // assert only one query executed
    List<String> loggedSql = LoggedSqlCollector.stop();
    Assert.assertEquals(1,  loggedSql.size());
  }
}
TOP

Related Classes of com.avaje.ebeaninternal.server.autofetch.TunedQueryWithNullFetchedBeanTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.