Polymorphic queries, selecting all childres - different result depending on 
select phrase
-----------------------------------------------------------------------------------------

                 Key: OPENJPA-1766
                 URL: https://issues.apache.org/jira/browse/OPENJPA-1766
             Project: OpenJPA
          Issue Type: Bug
          Components: jpa
    Affects Versions: 2.0.0
         Environment: windows 7, jdk1.5.0_22
            Reporter: Ɓukasz Ostaniewicz
            Priority: Minor


I've got simple inheritance entity tree:
@Entity 
@Table(name = "mgruchmagazynowy", schema="magazyn")
@Inheritance(strategy=InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(name="rodzaj",discriminatorType=DiscriminatorType.INTEGER,length=1)
public class RuchMagazynowy implements Serializable {
        (...)
}

@Entity
@DiscriminatorValue(value="0")
public class Dostawa extends RuchMagazynowy {
        (...)
}

@Entity
@DiscriminatorValue(value="1")
public class Wydanie extends RuchMagazynowy {
}

I've got two rows in "magazyn.mgruchmagazynowy" table: one with "rodzaj" set to 
0 and one with "rodzaj" set to 1

I'm trying to select all children (both Dostawa and Wydanie) and distinguish 
beetwen them: iterating over the results and using .getClass() or instanceof. 
My JUNIT test looks like:
        List<Object[]> list = dao.findRM();
        for (int i = 0; i < list.size(); i++) {
                final Object[] row = (Object[]) list.get(i);
                final Class clazz1 = row[0].getClass();
                final Class clazz2 = row[1].getClass();
                log.info("class1:" + clazz1);
                log.info("class2:" + clazz2);
        }

The problem is: I cannot achieve this if I don't specify TYPE(u) amoung SELECT 
items on my SELECT phrase. I thing the results of my both test cases should be 
equal (As I think, only test case 2 results gives correct results).


TEST CASE 1:
        String select = "SELECT u,e FROM RuchMagazynowy u, 
ElementRuchuMagazynowego e " +
                " WHERE u.id = e.ruchMagazynowy.id  ";
        query = em.createQuery(select);
        List<Object[]> items = query.getResultList();

RESULT:
2890 [main] INFO org  - class1:class pl.imedia.magazyn.bo.RuchMagazynowy
2890 [main] INFO org  - class2:class 
pl.imedia.magazyn.bo.ElementRuchuMagazynowego
2890 [main] INFO org  - class1:class pl.imedia.magazyn.bo.RuchMagazynowy
2890 [main] INFO org  - class2:class 
pl.imedia.magazyn.bo.ElementRuchuMagazynowego


TEST CASE 2:
        String select = "SELECT u,e, TYPE(u) FROM RuchMagazynowy u, 
ElementRuchuMagazynowego e " +
                " WHERE u.id = e.ruchMagazynowy.id ";
        query = em.createQuery(select);
        List<Object[]> items = query.getResultList();

RESULT:
2864 [main] INFO org  - class1:class pl.imedia.magazyn.bo.Dostawa
2864 [main] INFO org  - class2:class 
pl.imedia.magazyn.bo.ElementRuchuMagazynowego
2864 [main] INFO org  - class1:class pl.imedia.magazyn.bo.Wydanie
2864 [main] INFO org  - class2:class 
pl.imedia.magazyn.bo.ElementRuchuMagazynowego

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to