2012-04-04 12 views
0

Ich habe eine Felder von customerName, MembershipNumber, Nationalität und ein anderes Feld in meiner Kundentabelle und wenn ich einen Wert von den oben genannten drei. Ich muss nur eine benannte Abfrage schreiben, um den Wert aus der Customer-Tabelle von dem Wert zu bekommen, den ich bekommen habe. Gibt es eine Möglichkeit, dass durch benannte Abfrage ohne Verwendung von normaler Abfrage in JPA zu tun? ...Named Query Möglichkeit

StringBuilder s=new StringBuilder(); 
s.append("select c from customerdetail c where) 
if(customerName!=null) 
{ 
    s.append(" c.customerName = :customerName") 
} 
else if(memberShipNumber!=null) 
{ 
    s.append(" c.memberShipNumber = :memberShipNumber") 
} 
else if(nationality!=null) 
{ 
    s.append(" nationality = :nationality) 
} 

Hier i die gleiche Tabelle mit drei Bedingungen. Gibt es also die Möglichkeit, nur eine benannte Abfrage oder eine andere statische Abfrage zu schreiben, um alle drei Bedingungen in jpa zu erfüllen?

+0

Können Sie weitere Informationen wie - aktuelle Abfrage, Problem konfrontiert und erwartetes Ergebnis davon hinzufügen. –

+0

Was? Kannst du etwas weiter erklären? – arg20

Antwort

1

Versuchen Sie zu lesen ObjectDB's manual on JPA Queries. Es bietet Informationen zum Auswählen von JPA-Entitäten und verschiedenen Varianten mit seinen benutzerdefinierten Feldern. Es hat Abfrage-Beispiele wie in JPQL ausgedrückt, also unter Verwendung von Kriterien. Und ja, Sie können namedQuery mit JPQL definieren und später verwenden - verwenden Sie es erneut.

+0

Danke für Ihre Antwort. Aber ich brauche die Abfrage zur statischen Zeit ausgeführt werden. Also jede Möglichkeit, das zu tun? ... – user1227591

0

Sie können Projektion verwenden, um mit NamedQuery, wird in diesem Beispiel ein einzelnes customer Feld erhalten, wenn MembershipNumber eindeutigen oder eine Liste mit jedem customer ist, die den in den Zustand übereinstimmt:

@Entity 
@NamedQuery(name="getCustomerName", query="SELECT c.customerName FROM Customer c WHERE c.membershipNumber = :memNum") 
public class Customer { 
... 
} 

Dann können Sie es mit anrufen: (em ist Ihr EntityManager)

String customerName = em.createNamedQuery("getCustomerName") 
.setParameter("memNum", myMembershipNumber) 
.getSingleResult(); 
1

Benannte Abfragen sind statisch & ihren Umfang Persistenzkontext ist, können sie nicht zur Laufzeit geändert werden.

Im Folgenden finden Sie ein Beispiel zum Hinzufügen von Parametern basierend auf der Bedingung mithilfe der Kriterien-API.

Sonst können Sie mit dem Erstellen einer Abfrage mit Zeichenfolge durch Anfügen von Bedingungen anstelle der benannten Abfrage gehen.