JPA-Query funktioniert nicht
Können Sie mir bitte helfen mit diesem problem? Ich möchte diese Methode verwenden, für das spezifische nick in meiner Datenbank (ist Es aus mit Apache Derby). Ich habe den EntityManager und-mapping, Persistenz - Entity-Klassen aus der Datenbank in NetBeans.
public static boolean findByNick(String nick) {
List<eng.db.User> ret;
EntityManager em = getEntityManager();
Query q = em.createQuery("SELECT * FROM User u WHERE u.nick =:nick");
q.setParameter("nick", nick);
ret = q.getResultList();
em.close();
boolean hodnota = false;
if (ret.isEmpty()) {
hodnota = true;
}
return hodnota;
}
Bekomme ich diesen Fehler:
java.lang.IllegalArgumentException: Eine Ausnahme ist aufgetreten während der Erstellung einer Abfrage in der EntityManager:
Ausnahme Beschreibung: Syntax-Fehler beim Parsen der [SELECT * FROM User u WHERE u.nick =:nick)].
[21, 21], Eine select-Anweisung eine FROM-Klausel.
[7, 7] Der linke Ausdruck fehlt aus dem arithmetischen Ausdruck.
[9, 20] Der richtige Ausdruck nicht ein arithmetischer Ausdruck.
[41, 42] Die Abfrage enthält eine ungültige Endung.
Wo ist das problem bitte?
- auch wenn Sie mit einem: "VOM Benutzer u, WO u Sie.nick =:nick", wie die Abfrage ?
- Wo ist das problem? Das ist nicht eine gültige JPQL-Abfrage. Es gibt kein "*" in JPQL. Jede grundlegende JPA-Referenz würde dir das sagen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn
nick
ist der Primärschlüssel der entity (@Id
), dann verwenden:Oder wenn nicht:
Durch Rücksendung eine einfache boolean, minimieren Sie die DB-Antwort.
User
als ein reserviertes Wort. Ändern Sie den Namen der Tabelle (verwenden Sie@Table
annotation der entity-Klasse).SELECT u.UserID, u.EnterKey, u.Nick FROM Userr u WHERE u.Nick = :nick
Es sollte
UPDATE
entsprechend Ihrer comnent jetzt sollte die Abfrage sein:
oder mit benannten param
wo usereID, enterKey und nick sind die Felder(Eigenschaften) der entity-Typ Benutzer.
Ihre Benutzer-Klasse sollte sehen ziemlich ähnlich wie diese
Hinweis, dass diese hql und verwenden Sie die Klasse und den Namen der Eigenschaften des Objekts Modell, das Sie definiert als Argumente für die Abfrage.
in Ihrer Abfrage, Hibernate oder andere JPA-Implementierung erstellt eine Liste der Objekte vom Typ User mit dem Sie die Zuordnung aus, die Sie definiert. Die expressen * kann nicht in Zusammenhang mit einem Objekt-Namen dieses Typs. Das äquivalent zu * in sql wird in Objekt-bezogene Abfrage-Sprachen, die von der alias in der from-Klausel in ure case "u" sine die from-Klausel sieht folgendermaßen aus:
Wenn Sie wollen einfach nur zu markieren seperater Felder der Entity müssen Sie deklarieren
oder in Ihrem speziellen Fall
In diesem Fall Instanzen von Typ User erstellt werden und das Feld nick eingestellt ist.
from User u where u.nick = :nick
, ohne die select-Anweisung.