2016-08-08 6 views
0

Ich habe versucht, den folgenden Code zum Abrufen der einzelnen NotificationSubType-Objekt. Doch die Suche nach Ausnahme wie "org.apache.openjpa.persistence.ArgumentException: Fand "von" im Zeichen 1, aber erwartet: [" DELETE " "SELECT", "UPDATE"]."JPA Select Abfrage mit Composite-Primärschlüssel führt eine Ausnahme

Bitte helfen Sie mir bei gegebenem Problem. -Code ist unten angegeben: ... ...

try { 

    Query query = this.em.createQuery("from NotificationSubType conc WHERE conc.id.alertTyC = ?1 and conc.id.alertSubTyC = ?2"); 

    query.setParameter(1, "MPPRINT"); 
    query.setParameter(2, "REIN"); 

    NotificationSubType trackIdResLst = (NotificationSubType)query.getSingleResult(); 

    if (null != trackIdResLst) { 
     System.out.println("TRUE"); 
    } else{ 
     System.out.println("FALSE"); 
    } 
} catch (Exception e) { 
    NotificationLogger.errorWithThrowable(e); 
    throw new NotificationServiceException(e.getMessage()); 
} 

...

Antwort

0

Warum die Ausnahme nicht lesen? und lesen Sie die JPA Spezifikation?

JPQL Anweisungen müssen mit SELECT, UPDATE oder DELETE beginnen. Alles andere als das ist illegal (und Ihr startet mit FROM aus irgendeinem Grund). Setzen Sie ein SELECT und der Kandidat alias vor ihm für mehr Aussicht auf Erfolg

Ja Hibernate bastardises der JPQL Standard mit HQL (die Sie SELECT plus dem Alias ​​wegzulassen erlaubt), aber Sie verwenden OpenJPA so müssen Sie JPA verwenden konforme Abfragen, und außerdem wäre es eine gute Übung, selbst wenn Sie Hibernate verwenden, um den Standard zu befolgen!

+0

Vielen Dank für Ihre großartige Eingabe. Ich habe es auch mit ausgesucht. Es gibt Erfolg für einfache Select-Abfrage wie "select * from NotificationSubType", aber wenn ich Bedingung wie "select * from NotificationSubType conc WHERE conc.id.alertTyC =? 1 und conc.id.alertSubTyC =? 2" Es gibt Fehler hinzufügen . Gibt es irgendetwas, das ich für bedingte Auswahl-Abfrage in Open JPA konfigurieren muss? –

+0

Wie gesagt ... lesen Sie die JPA-Spezifikation. Sie können nicht "SELECT *" in JPQL tun! "SELECT conc FROM NotificationSubType conc" ist JPQL !. Bitte lesen Sie die Dokumentation, anstatt SQL zufällig auf JPA zu werfen. JPQL! = SQL –

Verwandte Themen