package testing.simple.mappings; | |
import static junit.framework.Assert.assertEquals; | |
import static junit.framework.Assert.assertNotNull; | |
import static junit.framework.Assert.fail; | |
import javax.persistence.EntityManager; | |
import javax.persistence.EntityManagerFactory; | |
import javax.persistence.Persistence; | |
import org.eclipse.persistence.descriptors.ClassDescriptor; | |
import org.eclipse.persistence.dynamic.DynamicClassLoader; | |
import org.eclipse.persistence.dynamic.DynamicEntity; | |
import org.eclipse.persistence.dynamic.DynamicHelper; | |
import org.eclipse.persistence.dynamic.DynamicType; | |
import org.eclipse.persistence.dynamic.DynamicTypeBuilder; | |
import org.eclipse.persistence.exceptions.DynamicException; | |
import org.eclipse.persistence.jpa.JpaHelper; | |
import org.eclipse.persistence.jpa.dynamic.JPADynamicHelper; | |
import org.eclipse.persistence.jpa.dynamic.JPADynamicTypeBuilder; | |
import org.eclipse.persistence.mappings.DirectToFieldMapping; | |
import org.eclipse.persistence.mappings.OneToOneMapping; | |
import org.junit.After; | |
import org.junit.AfterClass; | |
import org.junit.Assert; | |
import org.junit.BeforeClass; | |
import org.junit.Test; | |
public class SimpleTypes_OneToOne { | |
private static EntityManagerFactory emf; | |
@Test | |
public void verifyConfig() throws Exception { | |
DynamicHelper helper = new JPADynamicHelper(emf); | |
ClassDescriptor descriptorA = helper.getSession().getClassDescriptorForAlias("SimpleA"); | |
assertNotNull("No descriptor found for alias='SimpleA'", descriptorA); | |
DynamicType simpleTypeA = helper.getType("SimpleA"); | |
assertNotNull("'SimpleA' EntityType not found", simpleTypeA); | |
assertEquals(descriptorA, simpleTypeA.getDescriptor()); | |
DirectToFieldMapping a_id = (DirectToFieldMapping) descriptorA.getMappingForAttributeName("id"); | |
assertEquals(int.class, a_id.getAttributeClassification()); | |
DirectToFieldMapping a_value1 = (DirectToFieldMapping) descriptorA.getMappingForAttributeName("value1"); | |
assertEquals(String.class, a_value1.getAttributeClassification()); | |
ClassDescriptor descriptorB = helper.getSession().getClassDescriptorForAlias("SimpleB"); | |
assertNotNull("No descriptor found for alias='SimpleB'", descriptorB); | |
DynamicType simpleTypeB = helper.getType("SimpleB"); | |
assertNotNull("'SimpleB' EntityType not found", simpleTypeB); | |
assertEquals(descriptorB, simpleTypeB.getDescriptor()); | |
DirectToFieldMapping b_id = (DirectToFieldMapping) descriptorB.getMappingForAttributeName("id"); | |
assertEquals(int.class, b_id.getAttributeClassification()); | |
DirectToFieldMapping b_value1 = (DirectToFieldMapping) descriptorB.getMappingForAttributeName("value1"); | |
assertEquals(String.class, b_value1.getAttributeClassification()); | |
OneToOneMapping a_b = (OneToOneMapping) descriptorA.getMappingForAttributeName("b"); | |
assertEquals(descriptorB, a_b.getReferenceDescriptor()); | |
} | |
@Test | |
public void createSimpleA() { | |
DynamicHelper helper = new JPADynamicHelper(emf); | |
DynamicType simpleTypeA = helper.getType("SimpleA"); | |
Assert.assertNotNull(simpleTypeA); | |
EntityManager em = emf.createEntityManager(); | |
DynamicEntity simpleInstance = simpleTypeA.newDynamicEntity(); | |
simpleInstance.set("id", 1); | |
simpleInstance.set("value1", "A1"); | |
em.getTransaction().begin(); | |
em.persist(simpleInstance); | |
em.getTransaction().commit(); | |
int simpleCount = ((Number) em.createQuery("SELECT COUNT(s) FROM SimpleA s").getSingleResult()).intValue(); | |
Assert.assertEquals(1, simpleCount); | |
em.close(); | |
} | |
@Test | |
public void createSimpleB() { | |
DynamicHelper helper = new JPADynamicHelper(emf); | |
DynamicType simpleTypeB = helper.getType("SimpleB"); | |
Assert.assertNotNull(simpleTypeB); | |
EntityManager em = emf.createEntityManager(); | |
DynamicEntity simpleInstance = simpleTypeB.newDynamicEntity(); | |
simpleInstance.set("id", 1); | |
simpleInstance.set("value1", "B1"); | |
em.getTransaction().begin(); | |
em.persist(simpleInstance); | |
em.getTransaction().commit(); | |
int simpleCount = ((Number) em.createQuery("SELECT COUNT(s) FROM SimpleB s").getSingleResult()).intValue(); | |
Assert.assertEquals(1, simpleCount); | |
em.close(); | |
} | |
@Test | |
public void createSimpleAwithSimpleB() { | |
DynamicHelper helper = new JPADynamicHelper(emf); | |
DynamicType simpleTypeA = helper.getType("SimpleA"); | |
Assert.assertNotNull(simpleTypeA); | |
DynamicType simpleTypeB = helper.getType("SimpleB"); | |
Assert.assertNotNull(simpleTypeB); | |
EntityManager em = emf.createEntityManager(); | |
Assert.assertNotNull(JpaHelper.getServerSession(emf).getDescriptorForAlias("SimpleB")); | |
DynamicEntity simpleInstanceB = simpleTypeB.newDynamicEntity(); | |
simpleInstanceB.set("id", 2); | |
simpleInstanceB.set("value1", "B2"); | |
DynamicEntity simpleInstanceA = simpleTypeA.newDynamicEntity(); | |
simpleInstanceA.set("id", 2); | |
simpleInstanceA.set("value1", "A2"); | |
simpleInstanceA.set("b", simpleInstanceB); | |
em.getTransaction().begin(); | |
em.persist(simpleInstanceB); | |
em.persist(simpleInstanceA); | |
em.getTransaction().commit(); | |
int simpleCountB = ((Number) em.createQuery("SELECT COUNT(s) FROM SimpleB s").getSingleResult()).intValue(); | |
Assert.assertEquals(1, simpleCountB); | |
int simpleCountA = ((Number) em.createQuery("SELECT COUNT(s) FROM SimpleA s").getSingleResult()).intValue(); | |
Assert.assertEquals(1, simpleCountA); | |
em.close(); | |
} | |
@Test | |
public void invalidTypeSet() { | |
DynamicHelper helper = new JPADynamicHelper(emf); | |
DynamicType simpleTypeA = helper.getType("SimpleA"); | |
Assert.assertNotNull(simpleTypeA); | |
DynamicType simpleTypeB = helper.getType("SimpleB"); | |
Assert.assertNotNull(simpleTypeB); | |
Assert.assertNotNull(JpaHelper.getServerSession(emf).getDescriptorForAlias("SimpleB")); | |
DynamicEntity simpleInstanceB = simpleTypeB.newDynamicEntity(); | |
simpleInstanceB.set("id", 2); | |
simpleInstanceB.set("value1", "B2"); | |
DynamicEntity simpleInstanceA = simpleTypeA.newDynamicEntity(); | |
simpleInstanceA.set("id", 2); | |
simpleInstanceA.set("value1", "A2"); | |
try { | |
simpleInstanceA.set("b", simpleInstanceA); | |
} catch (DynamicException de) { | |
return; | |
} | |
fail("Should have caught DynamicException for invalid set type"); | |
} | |
@BeforeClass | |
public static void setUp() { | |
emf = Persistence.createEntityManagerFactory("empty"); | |
DynamicHelper helper = new JPADynamicHelper(emf); | |
DynamicClassLoader dcl = helper.getDynamicClassLoader(); | |
Class<?> simpleTypeB = dcl.createDynamicClass("model.SimpleB"); | |
DynamicTypeBuilder bFactory = new JPADynamicTypeBuilder(simpleTypeB, null, "SIMPLE_TYPE_B"); | |
bFactory.setPrimaryKeyFields("SID"); | |
bFactory.addDirectMapping("id", int.class, "SID"); | |
bFactory.addDirectMapping("value1", String.class, "VAL_1"); | |
Class<?> simpleTypeA = dcl.createDynamicClass("model.SimpleA"); | |
DynamicTypeBuilder aFactory = new JPADynamicTypeBuilder(simpleTypeA, null, "SIMPLE_TYPE_A"); | |
aFactory.setPrimaryKeyFields("SID"); | |
aFactory.addDirectMapping("id", int.class, "SID"); | |
aFactory.addDirectMapping("value1", String.class, "VAL_1"); | |
aFactory.addOneToOneMapping("b", bFactory.getType(), "B_FK").setCascadePersist(true); | |
helper.addTypes(true, true, aFactory.getType(), bFactory.getType()); | |
} | |
@After | |
public void clearDynamicTables() { | |
EntityManager em = emf.createEntityManager(); | |
em.getTransaction().begin(); | |
em.createQuery("DELETE FROM SimpleA").executeUpdate(); | |
em.createQuery("DELETE FROM SimpleB").executeUpdate(); | |
em.getTransaction().commit(); | |
em.close(); | |
} | |
@AfterClass | |
public static void shutdown() { | |
EntityManager em = emf.createEntityManager(); | |
em.getTransaction().begin(); | |
em.createNativeQuery("DROP TABLE SIMPLE_TYPE_A CASCADE CONSTRAINTS").executeUpdate(); | |
em.createNativeQuery("DROP TABLE SIMPLE_TYPE_B CASCADE CONSTRAINTS").executeUpdate(); | |
em.getTransaction().commit(); | |
em.close(); | |
emf.close(); | |
} | |
} |