Hallo zusammen!
Ich habe ein sehr interessantes Problem mit der Vererbung des Types JOINED.
Hibernate version:
3.2.4 SP1
Name and version of the database you are using:
Ingres 9.0.4
Es handelt sich um unterschiedliche Todo-Einträge, die alle von einer Basisklasse erben.
Die Basis-Klasse sieht folgendermaßen aus:
Code:
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@Inheritance(strategy = InheritanceType.JOINED)
@Table(name = "uptoip_todo", schema = "ingres", uniqueConstraints = {})
public class UptoipTodo implements java.io.Serializable
{
[...]
Die Child-Klassen sehen wie folgt aus:
1. TodoProject
Code:
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@Table(name = "uptoip_todo_project", schema = "ingres")
public class UptoipTodoProject extends UptoipTodo
{
[...]
2. TodoIpRight
Code:
@Entity
@org.hibernate.annotations.Entity(dynamicUpdate = true)
@Table(name = "uptoip_todo_ip_right", schema = "ingres")
public class UptoipTodoIpRight extends UptoipTodo
{
[...]
Jetzt ist hier offensichtlich kein Unterschied zu erkennen. Einzig in den Member-Variablen unterscheiden sich diese beiden Child-Klassen.
Mit folgender Query versuche ich die unterschiedlichen Todo-Einträge zu laden.
Code:
em.createQuery("FROM UptoipTodo u "
+ "WHERE u.resolveUser is null ");
In der Datenbank sind für jede Klasse Einträge hinterlegt, d.h. die Abfrage liefert für jede Child-Klasse ein Ergebnis. Das ist auch der Fall
ABER: Handelt es sich um einen Todo-Eintrag vom Typ TodoProject kann Hibernate die Information, dass es sich um einen TodoProject-Eintrag handelt nicht herstellen und gibt deshalb nur den Typ UptoipTodo retour - also die Basis-Klasse. Bei Todo-Einträgen vom Typ TodoIpRight ist das kein Problem, hier kann die Vererbungsinformation weitergeben werden.
Das bedeutet: Für die eine Vererbungsstruktur kann Hibernate die Child-Klasse in der Ergebniscollection retour liefern und für die andere Vererbungsstruktur nicht.
Ich hoffe mir kann dabei jemand weiterhelfen!!
Besten Dank im Voraus!
lG,
Alex