From caa4b76fe246bebf47ada251d5e84e0ada35b2bb Mon Sep 17 00:00:00 2001 From: Michael Dick Date: Thu, 6 Sep 2007 22:16:10 +0000 Subject: [PATCH] OPENJPA-353 git-svn-id: https://svn.apache.org/repos/asf/openjpa/trunk@573398 13f79535-47bb-0310-9956-ffa450edef68 --- .../strats/InValueDiscriminatorStrategy.java | 3 +- .../discriminator/TestDiscriminatorTypes.java | 56 ++++++++++++++++++- 2 files changed, 57 insertions(+), 2 deletions(-) diff --git a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/InValueDiscriminatorStrategy.java b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/InValueDiscriminatorStrategy.java index 730f1430d..d105060dd 100644 --- a/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/InValueDiscriminatorStrategy.java +++ b/openjpa-jdbc/src/main/java/org/apache/openjpa/jdbc/meta/strats/InValueDiscriminatorStrategy.java @@ -112,7 +112,8 @@ public abstract class InValueDiscriminatorStrategy && base.getJoinablePCSubclassMappings().length == 0)) return base.getDescribedType(); - Object cls = res.getObject(disc.getColumns()[0], -1, null); + Object cls = + res.getObject(disc.getColumns()[0], disc.getJavaType(), null); return getClass(cls, store); } diff --git a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/discriminator/TestDiscriminatorTypes.java b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/discriminator/TestDiscriminatorTypes.java index e60e2d848..5c6f9863b 100644 --- a/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/discriminator/TestDiscriminatorTypes.java +++ b/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/discriminator/TestDiscriminatorTypes.java @@ -50,7 +50,24 @@ public class TestDiscriminatorTypes extends SingleEMFTestCase { discrim = getMapping("CharRootEntity").getDiscriminator(); assertEquals(new Character('R'), discrim.getValue()); assertEquals(JavaTypes.CHAR, discrim.getJavaType()); - + + CharLeafEntity leaf = new CharLeafEntity(); + CharRootEntity root = new CharRootEntity(); + em.getTransaction().begin(); + em.persist(leaf); + em.persist(root); + em.getTransaction().commit(); + + em.refresh(leaf); + em.refresh(root); + + em.clear(); + + CharLeafEntity leaf2 = em.find(CharLeafEntity.class, leaf.getId()); + CharRootEntity root2 = em.find(CharRootEntity.class, root.getId()); + + assertNotNull(leaf2); + assertNotNull(root2); em.close(); } @@ -71,6 +88,25 @@ public class TestDiscriminatorTypes extends SingleEMFTestCase { assertEquals(new Integer(10101), discrim.getValue()); assertEquals(JavaTypes.INT, discrim.getJavaType()); + IntegerLeafEntity leaf = new IntegerLeafEntity(); + IntegerRootEntity root = new IntegerRootEntity(); + em.getTransaction().begin(); + em.persist(leaf); + em.persist(root); + em.getTransaction().commit(); + + em.refresh(leaf); + em.refresh(root); + + em.clear(); + + IntegerLeafEntity leaf2 = + em.find(IntegerLeafEntity.class, leaf.getId()); + IntegerRootEntity root2 = + em.find(IntegerRootEntity.class, root.getId()); + + assertNotNull(leaf2); + assertNotNull(root2); em.close(); } @@ -88,6 +124,24 @@ public class TestDiscriminatorTypes extends SingleEMFTestCase { discrim = getMapping("StringRootEntity").getDiscriminator(); assertEquals("StringRoot", discrim.getValue()); assertEquals(JavaTypes.STRING, discrim.getJavaType()); + + StringLeafEntity leaf = new StringLeafEntity(); + StringRootEntity root = new StringRootEntity(); + em.getTransaction().begin(); + em.persist(leaf); + em.persist(root); + em.getTransaction().commit(); + + em.refresh(leaf); + em.refresh(root); + + em.clear(); + + StringLeafEntity leaf2 = em.find(StringLeafEntity.class, leaf.getId()); + StringRootEntity root2 = em.find(StringRootEntity.class, root.getId()); + + assertNotNull(leaf2); + assertNotNull(root2); em.close(); }