sch.setId(1);
sch.setClassHName("SubclassHName");
sch.setName("SubclassHBaseClass5Name");
sch.setMidClass2Name("SubclassHMidClass2Name");
BaseClass5 bc5 = new BaseClass5();
bc5.setId(2);
bc5.setName("BaseClass5Name");
bc5.setSubclassh(sch);
sch.setBaseclass5(bc5);
MidClass2 mc2 = new MidClass2();
mc2.setId(3);
mc2.setMidClass2Name("MidClass2Name");
mc2.setName("MidClass2BaseClass5Name");
mc2.setSubclassh(sch);
em.getTransaction().begin();
em.persist(sch);
em.persist(bc5);
em.persist(mc2);
em.getTransaction().commit();
em.clear();
verifyDtypeColumnEntriesAndMapping(em, "BASECLASS5", 3,
BaseClass5.class);
// Verify that the midclass table does not contain a discriminator column
verifyNoDypeColumn(em, "MidClass2");
// Verify that the subclass table does not contain a discriminator column
verifyNoDypeColumn(em, "SubclassH");
// Run queries for each type. They should return only those values
// which match their respective types. This will not work for single
// table inheritance unless a discriminator column is defined.
verifyInheritanceQueryResult(em, "SubclassH",
classArray(SubclassH.class, MidClass2.class, BaseClass5.class),
1);
verifyInheritanceQueryResult(em, "MidClass2",
classArray(MidClass2.class, BaseClass5.class),
1, 3);
verifyInheritanceQueryResult(em, "BaseClass5",
classArray(BaseClass5.class),
1, 2, 3);
em.clear();
// Validate entity relationships
sch = em.find(SubclassH.class, 1);
assertEquals(sch.getName(),"SubclassHBaseClass5Name");
assertEquals(sch.getMidClass2Name(), "SubclassHMidClass2Name");
// SubclassH has relationship to BaseClass5
assertEquals(sch.getBaseclass5().getId(), 2);
bc5 = em.find(BaseClass5.class, 3);
assertEquals(bc5.getName(),"MidClass2BaseClass5Name");
// BaseClass5 has relationship to SubclassH through MidClass2
assertEquals(bc5.getSubclassh().getId(), 1);
bc5 = em.find(BaseClass5.class, 2);
assertEquals(bc5.getName(),"BaseClass5Name");
// BaseClass5 has relationship to SubclassH
assertEquals(bc5.getSubclassh().getId(), 1);
mc2 = em.find(MidClass2.class, 3);
assertEquals(mc2.getName(),"MidClass2BaseClass5Name");
assertEquals(mc2.getMidClass2Name(), "MidClass2Name");
// MidClass2 has relationship to SubclassH
assertEquals(bc5.getSubclassh().getId(), 1);
em.close();
}