Named Query Join

TheTobi

Aktives Mitglied
Ich habe eine Klasse Topic, diese hat eine ManyToOne beziehung zu Category, ich möchte nun mit einem NamedQuery alle Topics mit der category_id 1 bekommen

SELECT t FROM Topic t where t.category_id = :categoryId"

das funktioniert nicht, da Topic category_id nicht kennt sondern dieses Attribut wird wegen der ManyToOne beziehung generiert.

Beziehung in der Topic Klasse
@ManyToOne
private Category category;

Fehler:
could not resolve property: category_id
 
[c]SELECT t FROM Topic t where t.category.id = :categoryId[/c] falls die [c]@Id[/c] in der Klasse [c]Category[/c] auch [c]id[/c] heißt. Ansonsten entsprechend anpassen.
 
Hi,

hmm nee ich will noch was anderes, ich habe in der Topic Tabelle schon die Spalte category_id, die wurde wegen der ManyToOne Annotation erzeugt. Ich habe nun eine Category.id und möchte alle dazugehörigen Topics ausgeben. Also will ich praktisch das machen

select * from Topic t where t.category_id = 1

dann sollte ich alle Topics bekommen die als category_id eine 1 haben. Allerdings kann ich auf category_id nicht zugreifen oder er kennt die Spalte nicht.....
 
Du greifst per JPQL auch nicht auf Spalten und Tabellen, sondern auf Attribute und Objekte zu. Darum musst Du das Query so formulieren, dass Du den Objektbaum durchläufst um die gewünschten Informationen zu finden.

Falls mein Vorschlag nicht funktioniert (mein JPA ist etwas eingerostet), kann es sein, dass noch ein Join von Nöten ist:

[c]SELECT t FROM Topic t JOIN t.category c WHERE c.id = :categoryId[/c] oder
[c]SELECT t FROM Topic t, IN(t.category) c WHERE c.id = :categoryId[/c]
 

Zurück
Oben