Wie zu verwenden JOIN mithilfe der Hibernate - session.createSQLQuery()

Habe ich zwei Entitäten (Tabellen) - Mitarbeiter & Projekt. Ein Mitarbeiter kann mehrere Projekte haben.
Projekt Tabelle CREATOR_ID Feld bezieht sich auf die Tabelle Employee die ID-Feld. Employee-Entität nicht pflegen keine Referenz für das Projekt - aber das Projekt Entität ist eine Referenz für Mitarbeiter.

Mit EntityManager folgende Abfrage funktioniert einwandfrei -

entityManager.createQuery(
    "select e from EmployeeDTO e, ProjectDTO p"
    + " where p.id = ?1 and p.creator.id=e.id");

Aber da habe ich die LAZY-Verein-Beziehung, bekomme ich Fehler:

Konnte nicht initialisiert werden proxy - keine
Sitzung

wenn ich versuche, Zugriff auf Projekt-Informationen von Employee-Entität. Dies ist zu erwarten und so bin ich mit Hibernate die Session zu erstellen, die Abfrage, wie unten dargestellt.

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 in keiner Tabelle der FROM-Liste erscheint oder
innerhalb eines join-Spezifikation und ist außerhalb des Bereichs der join-Spezifikation,..."

Kann jeder jeden schlagen, was die richtige JOIN-syntax für einen solchen Fall? Wenn ich ("SELECT * FROM EMPLOYEE_TAB E, ........") es gibt andere Fehler:

java.lang.Classcastexception-Fehler:
[Ljava.lang.Object; cannot be cast to
com.im.server.dto.EmployeeDTO

.

Vielen Dank im Voraus.

InformationsquelleAutor javauser71 | 2011-01-14

Schreibe einen Kommentar