2016-03-21 9 views
3

Ich verwende Spring und Hibernate, mit JPG für den Datenbankzugriff. Bei Verwendung von namedQuery erhalte ich einen "unerwarteten Token" -Fehler, aber wenn ich die Abfrage direkt in entityManager 's create method schreibe, gibt es das korrekte Ergebnis.EntityManager erstellen Abfrage zeigen unerwartetes Token:

Das ist mein pojo und Abfrage für Benutzernamen abzurufen:

@NamedQueries(
    @NamedQuery(name="getUserName" , query="select u.name from User u") 
    }) 

@Entity 
@Table(name ="user") 
public class User { 
    @Id 
    @Column(name="user_id") 
    private int id; 
    @Column(name="user_name") 
    private String name; 
    //getter setter 
} 

und dies ist der Code, wo ich Benutzernamen abrufen möchten.

entityManager.createQuery("getUserName").getResultList(); 

Es erzeugt diesen Fehler:

org.hibernate.hql.internal.ast.ErrorCounter: line 1:1: unexpected token: getUserName 
! antlr.NoViableAltException: unexpected token: getUserName 

Wenn ich die gleiche Abfrage innerhalb entityManager.createQuery("write same query here ") schreiben, es funktioniert. Aber ich möchte Abfrage in benannter Abfrage schreiben und bei Bedarf darauf zugreifen. Ich benutze Frühling und Winterschlaf Integration. Warum zeigt namedquery ein nicht erwartetes Token bei der Verwendung in createquery Methode von entityManager?

Antwort

3

em.createQuery soll JPQL aufnehmen. Sie sollten stattdessen

em.createNamedQuery("getUserName"); 
+0

Danke tun. Es funktioniert für mich –