package org.mongodb.morphia.mapping; import org.bson.types.ObjectId; import org.junit.Assert; import org.junit.Test; import org.mongodb.morphia.TestBase; import org.mongodb.morphia.annotations.Embedded; import org.mongodb.morphia.annotations.Id; /** * @author Uwe Schaefer, (us@thomas-daily.de) */ public class ConcreteClassEmbeddedOverrideTest extends TestBase { @Test public void test() throws Exception { final E e1 = new E(); Assert.assertEquals("A", e1.a1.s); Assert.assertEquals("A", e1.a2.s); getDs().save(e1); final E e2 = getDs().get(e1); Assert.assertEquals("A", e2.a1.s); Assert.assertEquals("A", e2.a2.s); Assert.assertEquals(B.class, e2.a2.getClass()); Assert.assertEquals(A.class, e2.a1.getClass()); } public static class E { @Embedded private final A a1 = new A(); @Embedded(concreteClass = B.class) private final A a2 = new A(); @Id private ObjectId id; } public static class A { private String s = "A"; public String getS() { return s; } public void setS(final String s) { this.s = s; } } public static class B extends A { public B() { setS("B"); } } }