Ich habe zwei Entität (Tabellen) - Mitarbeiter & Projekt. Ein Mitarbeiter kann mehrere Projekte haben. Das CREATOR_ID-Feld der Projekttabelle verweist auf das ID-Feld der Employee-Tabelle. Employee-Entität behält keine Referenz für Project bei, aber Project entity hat eine Referenz für Employee.Wie verwendet man JOIN mit Hibernate session.createSQLQuery()
Mit EntityManager Abfrage folgende funktioniert gut -
entityManager.createQuery(
"select e from EmployeeDTO e, ProjectDTO p"
+ " where p.id = ?1 and p.creator.id=e.id");
Da ich aber die Faulen Assoziationsbeziehung haben, bekomme ich Fehler:
Could not initialize proxy - no Session
wenn ich versuche, Informationen von Unternehmen Mitarbeiter Projekt zuzugreifen. Dies wird erwartet und daher verwende ich die Hibernate-Sitzung, um die Abfrage wie unten gezeigt zu erstellen.
Session session = HibernateUtil.getSessionFactory().openSession();
org.hibernate.Query q = session.createSQLQuery(
"SELECT E FROM EMPLOYEE_TAB E, PROJECT_TAB P WHERE P.ID = "
+ projectId + " AND P.CREATOR_ID = E.ID")
.addEntity("EmployeeDTO ", EmployeeDTO.class)
.addEntity("ProjectDTO", ProjectDTO.class);
Aber ich bekomme Fehler wie: „Spalte‚E‘ist entweder nicht in einer Tabelle in der FROM-Liste oder erscheint innerhalb einer Spezifikation verbinden und ist außerhalb des Bereichs der Spezifikation kommen ...“
Kann jemand vorschlagen, was die richtige JOIN-Syntax für einen solchen Fall sein wird? Wenn ich ("SELECT * FROM EMPLOYEE_TAB E, ........")
verwenden - gibt es andere Fehler:
java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to com.im.server.dto.EmployeeDTO
.
Vielen Dank im Voraus.
Ich erhalte einen Fehler: "Syntaxfehler: aufgetreten" wo "in Zeile 1, Spalte 52" für beide Fälle. Für den ersten Fall war meine Abfrage: "SELECT DISTINCT P FROM Projekt DTO P beitreten P.creator mit P.id = 1". Der "Ersteller" ist ein Mitglied der Klasse "ProjectDTO" des Typs "EmployeeDTO". – javauser71
Mein Fehler! Ich habe "session.createSQLQuery (...)" verwendet, während ich "session.createQuery (...)" hätte verwenden sollen. Danke für den richtigen Vorschlag. Prost, – javauser71