2012-04-14 3 views
3

Ich mag diese Abfrage in JPA machen:Benannte Abfrage, wenn die Eigenschaft ein Objekt ist?

SELECT * FROM `happyDB`.`users` U WHERE U.party_as_user =1 AND U.party_party_id =2 

Dies funktioniert gut, aber mein Problem ist, dass ich Party nur als Objekt, nicht als ID und ich kann es nicht funktioniert.

Im Users -Entity wo ich versuche die benannte Abfrage Ich habe folgendes zu tun:

@JoinColumn(name = "pary_party_id", referencedColumnName = "party_id") 
@ManyToOne 
private Party partyId; 

@Column(name = "party_as_user") 
private Boolean partyAsUser; 

Ich habe versucht, es wie ein Objekt mit Punktnotation zu implementieren, aber das funktioniert nicht:

@NamedQuery(name = "Users.findByPartyAsUser", query = "SELECT u FROM Users u WHERE u.partyAsUser = :partyAsUser AND u.partyId.partyId = :partyId") 

Es gibt eine Eigenschaft namens partyId innerhalb des Party -Objekts, aber es funktioniert nicht. Gibt es dafür eine Lösung oder muss ich der Bean "Users" eine Eigenschaft wie private int partyID hinzufügen und sie jedes Mal ausfüllen, wenn eine neue Party in Users eingefügt wird?

Vielen Dank für Ihre Hilfe! Sami Nurmi

+0

Welchen Fehler bekommen Sie? Vielleicht nehmen Sie Ihre Party-Klasse. Im Allgemeinen würde das Anrufen der Beziehungsparty anstelle von partyId sinnvoll sein. – James

Antwort

9

Im Allgemeinen Sie ein Objekt als Parameter in JPA,

SELECT u FROM Users u WHERE u.partyAsUser = :partyAsUser AND u.party = :party 

Party party = new Party(id); 
query.setParameter("party", party); 

Aber was man haben sollte funktionieren, wenn Sie die richtigen Variablennamen verwenden können, meine Vermutung ist,

SELECT u FROM Users u WHERE u.partyAsUser = :partyAsUser AND u.party.id = :id 

Und Sie können immer eine native SQL-Abfrage verwenden, wenn Sie SQL besser als Objekte verstehen.

+0

Das war mein Fehler, ich brauche nicht einmal diese ID, nur Objekt. Es war nur ein dummer Fehler :(DANKE! – Sami