ERLEDIGT
JA
JA
ANTWORTEN
8
8
ZUGRIFFE
1255
1255
EMPFEHLEN
-
Hi,
ich habe in meinem EJB3-Projekt 2 Klassen Oberaufgabe und TeilAufgabe, die beide von der gleichen Klasse Aufgabe erben, also in der selben Tabelle TBL_Aufgabe gespeichert werden. Jetzt möchte ich nur die TEilAufgaben, die einem bestimmten Projekt zugeordnet sind (Spalte Project_id) aus der Tabelle lesen.
Meine Methode sieht, wie folgt aus:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13
public List<TeilAufgabe> getTA(Project pro){ List<TeilAufgabe> TAs=null; List<Object> auList; //Query qu = entityManager.createQuery("Select Objact(ta) from Aufgabe ta where ta.project =?1"); Query nqu = entityManager.createNativeQuery("Select * from TBL_AUFGABE where project_id="+augewaehltesPro.getId()+ " and dtype='TeilAufgabe'"); auList = nqu.getResultList(); while(auList.iterator().hasNext()){ TAs.add((TeilAufgabe) auList.iterator().next()); } System.out.println(TAs); return TAs; }
Leider bekomme ich bei dem cast auf TeilAufgabe in der while-Schleife eine Exception:
Caused by: java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to Data.Data.TeilAufgabe
at Data.Logic.ProjectBean.getTA(ProjectBean.java:134) ...
Weiss einer, was ich hier falsch mache, bzw. warum der Cast nicht funktioniert?
Danke im Vorraus
LuigiEd
-
Hallo,
normal muss doch da wo du Objact (ich denke das soll Object heißen) stehen hast, der Variablen-Name stehen, die du von dem Object haben möchtest.
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Die obere Query ist auskommentiert, weil dieser Versuch auch nicht funktioniert hatte. Allerdings kann es wirklich an meinem Tippfehler liegen.
Die Idee zu dieser Syntax habe ich aus dem Hibernate-Forum.
Allerdings war das Problem da etwas anders.
Danke für die schnelle Antwort
-
Hab übersehen, dass die erste Zeile auskommentiert ist. In welcher Zeile kommt denn der Fehler?
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Ok. DAS Problem habe ich jetzt gelöst. (normaler HQL-Query ohne Tippfehler
) Allerdings habe ich jetzt Probleme mit der Vererbung. Ich wollte die Überprüfung, ob ein zurückgeliefertes Aufgabe-Objekt eine Teilaufgabe ist, über den instaceof-Operator realisieren. Das scheint aber nicht zu funktionieren.
Aktueller Methoden-Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
public List<TeilAufgabe> getTA(Project pro){ List<TeilAufgabe> TAs=null; List<Object> auList; Query qu = entityManager.createQuery("Select Object(ta) from Aufgabe ta where ta.project =?1"); qu.setParameter(1, augewaehltesPro); auList = qu.getResultList(); System.out.println(auList.size()); while(auList.iterator().hasNext()){ Aufgabe a = (Aufgabe) auList.iterator().next(); if(a instanceof TeilAufgabe){ TeilAufgabe ta = (TeilAufgabe) a; System.out.println(ta.getId()); TAs.add(ta); } } System.out.println(TAs); return TAs; }
Weiss einer, wie ich die Überprüfung mache?
Danke
-
Hast du mal durch debugged und geschaut warum er nicht in die if-Anweisung geht?
Sonst könntest du es auch so machen.
Code :1
TeilAufgabe.class.isAssignableFrom(a.getClass())
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Hab es zwar noch nicht gedebuggt (hässliches Wort), aber ich vermute, dass Hibernate da ein AufgabenObjekt aus der DB holt (ist ja fast logisch
)
Soweit ich die Methode isAssignableForm verstehe, funktioniert das nur, wenn due Aufrufende Klasse eine Superklasse des Parameters ist. Bei mir ist es ja umgedreht.
Danke dir schonmal
-
Stimmt, sorry, hab ich gerade gar nicht bedacht.
Schau doch mal nach, von welcher Klasse das Object ist.
Gruß
SaschaEs ist schwer Allwissend zu sein. Aber ich komme damit klar. ;-)
-
Ok, das war mir jetzt zu doof
Ich habe jetzt in der Superklasse den InheritanceType auf TABLE_PER_CLASS gesetzt statt auf Single_table. Dann muss man bei der ID der Superklasse @GeneratedValue(strategy = GenerationType.TABLE) setzen und kann bei der Abfrage schön über die Tabelle TEilAufgabe gehen und spart sich den Cast. XD
Warum umständlich, wenn es auch einfach geht.
Danke dir trotzdem für deine Geduld
Ähnliche Themen
-
Computer startet nicht, amd data change update new data to dmi
Von Aiwonnie im Forum HardwareAntworten: 2Letzter Beitrag: 08.09.10, 17:32 -
ClassCastException: [Ljava.lang.Object bei einer List
Von bilobill im Forum JavaAntworten: 1Letzter Beitrag: 26.06.08, 20:06 -
cannot be cast to java.lang.Integer in Bean-Aufruf
Von riseX im Forum JavaAntworten: 11Letzter Beitrag: 20.04.07, 13:26 -
cast umwandlung bei Object geht das
Von zoulgami im Forum JavaAntworten: 5Letzter Beitrag: 24.03.07, 14:41 -
Object cast int (wieder)
Von Siesta im Forum JavaAntworten: 2Letzter Beitrag: 07.02.07, 12:20





Zitieren

Login





