java.lang.IllegalArgumentException:查询的FROM子句未声明标识变量[foo]

时间:2014-05-18 21:44:47

标签: jpa jpql

Caused by: java.lang.IllegalArgumentException: An exception occurred while creating a query in EntityManager: 
Exception Description: Error compiling the query [select t from Utilisateur t where LOGIN='' and PASSWORD=''], line 1, column 34: unknown identification variable [login]. The FROM clause of the query does not declare an identification variable [login].
    at org.eclipse.persistence.internal.jpa.EntityManagerImpl.createQuery(EntityManagerImpl.java:1477)
    at ejbservice.GestionUtulisateur.authentification(GestionUtulisateur.java:79)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

我的错误是什么,请帮助我,这是我的方法

public boolean authentification(String login, String password) {
     String a = "select t from Utilisateur t where LOGIN='"+login+"' and PASSWORD='"+password+"'";
     EntityManagerFactory emf = Persistence.createEntityManagerFactory("ProjetPU");
     EntityManager em = emf.createEntityManager();
     Query query = em.createQuery(a);
     List <Utilisateur> Loaded = query.getResultList();
     if ((Loaded.size())==0 ){
         return false ;
     } else {
         return true;
     }
}

2 个答案:

答案 0 :(得分:1)

语法不正确。假设您的Utilisateur.java实际上具有名为LOGINPASSWORD的属性,您将使用如下的JPQL表达式:

select t from Utilisateur t where t.LOGIN='...' and t.PASSWORD='...'

我猜。但这些对我来说似乎是表列名(因为将属性声明为小写的惯例)。检查您是否没有将列与属性混合。

答案 1 :(得分:0)

您正在使用JPQL查询,因此您应该使用setParameter来传递参数: 试试这个:

String a = "select t from Utilisateur t where LOGIN= :loginParam and PASSWORD= :passwordParam";
Query query = em.createQuery(a);
...
query.setParameter("loginParam",login);
query.setParameter("passwordParam",password);
List <Utilisateur> Loaded = query.getResultList();
...