package org.mongodb.morphia.mapping.lazy; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import org.junit.Assert; import org.junit.Test; import org.mongodb.morphia.annotations.Reference; import org.mongodb.morphia.mapping.lazy.proxy.LazyReferenceFetchingException; import org.mongodb.morphia.testutil.TestEntity; public class TestLazyCollectionReference extends ProxyTestBase { @Test(expected = LazyReferenceFetchingException.class) public final void testCreateProxy() { if (!LazyFeatureDependencies.testDependencyFullFilled()) { return; } // Create a root entity with 2 referenced entities RootEntity root = new RootEntity(); final ReferencedEntity referenced1 = new ReferencedEntity(); referenced1.setFoo("bar1"); final ReferencedEntity referenced2 = new ReferencedEntity(); referenced2.setFoo("bar2"); List<ReferencedEntity> references = new ArrayList<ReferencedEntity>(); references.add(referenced1); references.add(referenced2); root.references = references; // save to DB getDs().save(referenced1); getDs().save(referenced2); getDs().save(root); // read root entity from DB root = getDs().get(root); assertNotFetched(root.references); // use the lazy collection Collection<ReferencedEntity> retrievedReferences = root.references; Assert.assertEquals(2, retrievedReferences.size()); assertFetched(root.references); Iterator<ReferencedEntity> it = retrievedReferences.iterator(); Assert.assertEquals("bar1", it.next().getFoo()); Assert.assertEquals("bar2", it.next().getFoo()); // read root entity from DB again root = getDs().get(root); assertNotFetched(root.references); // remove the first referenced entity from DB getDs().delete(referenced1); // must fail root.references.size(); } public static class RootEntity extends TestEntity { @Reference(lazy = true) private Collection<ReferencedEntity> references; } public static class ReferencedEntity extends TestEntity { private String foo; public void setFoo(final String string) { foo = string; } public String getFoo() { return foo; } } }