package com.avaje.tests.text.json; import java.io.IOException; import java.util.List; import org.junit.Assert; import org.junit.Test; import com.avaje.ebean.BaseTestCase; import com.avaje.ebean.BeanState; import com.avaje.ebean.Ebean; import com.avaje.ebean.bean.EntityBean; import com.avaje.ebean.text.json.JsonContext; import com.avaje.ebean.text.json.JsonWriteOptions; import com.avaje.ebeaninternal.api.SpiEbeanServer; import com.avaje.ebeaninternal.server.deploy.BeanDescriptor; import com.avaje.tests.model.basic.Customer; import com.avaje.tests.model.basic.Order; import com.avaje.tests.model.basic.Product; import com.avaje.tests.model.basic.ResetBasicData; public class TestTextJsonReferenceBean extends BaseTestCase { @Test public void test() throws IOException { ResetBasicData.reset(); SpiEbeanServer server = (SpiEbeanServer)Ebean.getServer(null); JsonContext jsonContext = Ebean.json(); Product product = Ebean.getReference(Product.class, 1); BeanState beanState0 = Ebean.getBeanState(product); if (!beanState0.isReference()) { // got a cached value from beanCache } else { String jsonString = jsonContext.toJson(product); System.out.println(jsonString); Product refProd = jsonContext.toBean(Product.class, jsonString); BeanDescriptor prodDesc = server.getBeanDescriptor(Product.class); EntityBean eb = (EntityBean)refProd; prodDesc.isReference(eb._ebean_getIntercept()); BeanState beanState = Ebean.getBeanState(refProd); Assert.assertTrue(beanState.isNew()); String name = refProd.getName(); Assert.assertNull(name); // Set to be 'loaded' to invoke lazy loading beanState.setLoaded(); String name2 = refProd.getName(); Assert.assertNotNull(name2); } List orders = Ebean.find(Order.class) // .setUseCache(false) .select("status, orderDate, shipDate, customer").fetch("details", "*") // .fetch("details.product","id") .order().asc("id").findList(); Order order = orders.get(0); JsonWriteOptions options = JsonWriteOptions.parsePath("*,details(id,orderQty,product(id))"); String jsonOrder = jsonContext.toJson(order, options); System.out.println(jsonOrder); Order o2 = jsonContext.toBean(Order.class, jsonOrder); Customer customer = o2.getCustomer(); BeanDescriptor custDesc = server.getBeanDescriptor(Customer.class); Assert.assertTrue(custDesc.isReference(((EntityBean)customer)._ebean_getIntercept())); } }