Einfache hql namens Abfrage mit einem inner-join

Möchte ich so etwas in meiner Domäne/entity-Objekt :

@Entity
@NamedQueries({
@NamedQuery(name="favouriteCats", query="from Cat c inner join on UserCat uc where uc.isFavourtie = true and uc.user = :user")
})
public final class Cat extends BaseTable

So, in meinem service-layer kann ich dies tun :

Query query = session.getNamedQuery("favouriteCats")
query.setParameter(0, MyUser);
return query.list();

Aber, meine syntax in HQL ist falsch - und nachm zehn Minuten suchen an den offiziellen docs habe ich beschlossen, aufzugeben und hier Fragen ... ?
Meine usercat Tabelle verknüpft wird, etwa so :

@ManyToOne(cascade = CascadeType.MERGE)
@JoinColumn(name="cat_fk", insertable=false, updatable=false)
private cat

Sql ist dies, funktioniert es auf meinem db-Eingabeaufforderung:

select c.* 
from cat as c inner join usercat as uc on c.id = uc.cat_fk 
and uc.isFavourite = 1 //bit field
and uc.user_fk = 74 //just user id

Ist es nur mich oder ist der hibernate-Dokumentation eher schmerzhaft, und finden Sie sich oft gefragt, ob es wäre schneller, nur um zu schreiben normalen jdbc vorbereitete Anweisungen, füllen Sie Ihre pojos/domain-Objekte/dto... ?

Was versuchen Sie zu erreichen, die von dieser Abfrage?
Übergeben Sie die Benutzer-id, suchen von allen Favoriten, die Katzen auf usercat Tabelle, die verbunden ist, auf die cat-Tabelle
Warum nicht direkt mit SQL anstelle von HQL, ist die Methode session.createSQLQuery(query);
Nun ja, ich denke, ich könnte, aber es gibt Vorteile zum haben eine benannte Abfrage oder ein Kriterium Abfragen. Und das sollte nicht sein, , schwierig mit hibernate.

InformationsquelleAutor NimChimpsky | 2011-10-27

Schreibe einen Kommentar