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.