inner join

Status
Nicht offen für weitere Antworten.

pusteblume

Mitglied
hallöle,

irjendwie steh ich auf'm schlauch oder geht das überhaupt mit hibernate?

ich habe folgende sql-abfrage:

Code:
select tabelle1.id1, tabelle1.name 
from tabelle1
inner join tabelle2 on tabelle1.id1 = tabelle2.id2 
where tabelle2.tid=1;

für tabelle1 habe ich eine bean, nennen wir sie bean1. meine überlegungen für hql waren diese:

Code:
select package.bean1 inner join tabelle2 with id1 = id2 where tid = :tid
da bekomme ich die meldung:
unexpected token: inner

warum? achso in tabelle1 in der db stehen mehr felder als in der bean. kann man das so machen oder müssen aufbau von bean und tabelle haargenau gleich sein oder sucht sich hibernate dann nur die entsprechenden felder aus der db zu denen, die in der bean vorhanden bzw gemappt sind?

nehme ich die bean raus und frage nach einzelnen values also mit:

Code:
select id, name from bean1 inner join tabelle2 with id1 = id2 where tid = :tid

erhalte ich diese fehlermeldung:
Path expected for join!

also habe ich das jetzt so gemacht:
Code:
select id, name from bean1 inner join package.bean2 with id1 =id2 where tid = :tid

und bekomme eine java.lang.NullPointerException

java.lang.NullPointerException
at org.hibernate.hql.ast.HqlSqlWalker.createFromJoinElement(HqlSqlWalker.java:310)

heißt das jetzt, dass in dem join nix raus kommt?


über jegliche tipps wär ich sehr dankbar.

lg pb
 

byte

Top Contributor
Versuch mal sowas in der Art:
Code:
select b1.id, b1.name from Bean1 b1, Bean2 b2 where b1.id = b2.id
 

pusteblume

Mitglied
hallo byto,

danke für die antwort. mh, ok, ich erkläre vielleicht besser dazu, was ich vorhabe. ;)

also ich habe folgendes:

tabelle1:
lid name
1 string1
2 string2
3 string3

tabelle2:
tid lid
1 1
1 2
2 3

jetzt wird mit einem jsp-formular eine tid ausgewählt (tid_input) und übergeben. mit dieser tid mache ich eine abfrage in der db

Code:
select lid from tabelle2 where tid = input_tid;

wäre tid_input = 1 bekäme ich als ergebnis 1 und 2.

mit diesen beiden (lid_input) will ich dann eine abfrage auf tabelle1 vornehmen:

Code:
select lid, name from tabelle1 where lid = lid_input;

mit dem sql-string in meinem ausgangs-posting hat das super im pgadmin geklappt. jetzt wollte ich das halt mit einem rutsch auch mit hibernate und hql machen. ich könnte es natürlich auch mit einer SQLquery machen, aber das wäre ja nicht sinn und zweck von hibernate. ;) ich könnte theoretisch auch in tabelle1 einfach eine dritte spalte einfügen, in der die zugehörigen tid aus tabelle2 stehen. jedoch kann es vorkommen, dass ein tupel aus tabelle1 zu mehreren tupeln aus tabelle2 gehören könnte. und dann müsste ich ja diese tupels redundant vorhalten, was unpraktisch wäre, weil in tabelle1 eigentlich auch noch mehr spalten sind, deren inhalte sich halt ändern können. war das verständlich formuliert?

deshalb gibt mir dein vorschlag leider nicht das richtige ergebnis raus. zum schluss müsste ich halt zwei objekte haben mit
lid = 1 und name = string1
lid = 2 und name = string2


lg pb
 

semi

Top Contributor
Mach doch einfach
Code:
Bean1 b1 join Bean2 b2 on b2.id = b1.id
und schau dir an, was für SQL-Code dabei rauskommt. Wenn die Assoziation nicht optional ist, macht Hibernate inner join daraus.
 
Status
Nicht offen für weitere Antworten.

Ähnliche Java Themen


Oben