2012-11-16 23 views
8

Ich versuche, zwei Tabellen auf einer Spalte innerlich zu verbinden. Von DB-Seite gibt es keine Zuordnung, da ich etwas nicht diskutieren möchte.Inner Join mit HQL

Ich möchte HQL-Abfrage mit INNER JOIN ausführen und ROLE Objekte/Ergebnisse abrufen.

Hier ist meine hql bisher

session.createQuery ("von Rolle als Rolle INNER ENGAGEMENT als Beteiligung JOIN ON role.id = involvement.roleid WHERE involvement.id = X"). Liste ();

I ON sehen ist auf HQL nicht verfügbar. Wie teile ich Hibernate ausdrücklich mit, dass ich nur in dieser Spalte mitmachen soll?

ich unter einem versuchten zu

wählen roleSpec aus Rolle als Rolle, ENGAGEMENT als Beteiligung WHERE role.ID = involvement.role_id und involvement.id = 27251352

Aber Ich bekomme ROLE nicht in Ausnahme zugeordnet.

+0

verwenden Sie stattdessen SQL. HQL funktioniert meist nur, wenn Sie eine korrekte Beziehung und Entitätszuordnung haben. (Sie können immer noch Theta-Stil beitreten, aber ich kann es nicht wirklich empfehlen) –

+0

können Sie mir sagen, wie verwende ich Hibernate, um SQL auszuführen. Der Rest der Anwendung verwendet Hibernate weitgehend. – Reddy

+0

Suchen Sie nach der systemeigenen Abfrage in der Hibernate-Referenz –

Antwort

14

Bitte überprüfen Sie, ob Ihre ROLE tatsächlich eine zugeordnete Entität ist. Darüber hinaus müssen Sie nicht "ON" ausführen - Hibernate weiß, was ist die Join-Spalte (ich weiß, wie dies bei JPA definieren) - also keine Notwendigkeit, es bei der Anweisung bereitzustellen. Es sollte sein -

session.createQuery("from Role as role INNER JOIN Involvement as involvement WHERE involvement.id = X").list(); 

Ich nehme an, Sie Rollenklasse ROLLE Tabelle zugeordnet haben, und Involvement Klasse Involement Tabelle abgebildet.
Vielleicht haben Sie versehentlich Tabellennamen verwendet, und deshalb erhalten Sie den Fehler "nicht zugeordnet".
Das letzte Mal, als ich HQL geschrieben habe (und nicht JPA-QL) habe ich folgende link als Referenz verwendet, es liefert alle benötigten Informationen.