1. 程式人生 > >hql語句之間少了空格引起的.IllegalArgumentException不合法異常

hql語句之間少了空格引起的.IllegalArgumentException不合法異常

line 1:81: unexpected token: e
at org.hibernate.hql.internal.antlr.HqlBaseParser.queryRule(HqlBaseParser.java:784)
at org.hibernate.hql.internal.antlr.HqlBaseParser.selectStatement(HqlBaseParser.java:316)
at org.hibernate.hql.internal.antlr.HqlBaseParser.statement(HqlBaseParser.java:198)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:283)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:186)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:141)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153)
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:541)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:650)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:102)
at com.lrq.dao.daoImpl.EmployeeDaoImpl.query(EmployeeDaoImpl.java:32)
at com.lrq.test.TestEmployee.main(TestEmployee.java:26)


java.lang.IllegalArgumentException: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: e near line 1, column 81 [select e from com.lrq.entity.Employee e where e.empId>-1and e.empName
=:eNameand e.empPwd=:ePwd]

at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:131)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:155)
at org.hibernate.internal.ExceptionConverterImpl.convert(ExceptionConverterImpl.java:162)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:658)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:102)
at com.lrq.dao.daoImpl.EmployeeDaoImpl.query(EmployeeDaoImpl.java:32)
at com.lrq.test.TestEmployee.main(TestEmployee.java:26)
Caused by: org.hibernate.hql.internal.ast.QuerySyntaxException: unexpected token: e near line 1, column 81 [select e from com.lrq.entity.Employee e where e.empId>-1and e.empName=:eNameand e.empPwd=:ePwd]
at org.hibernate.hql.internal.ast.QuerySyntaxException.convert(QuerySyntaxException.java:74)
at org.hibernate.hql.internal.ast.ErrorCounter.throwQueryException(ErrorCounter.java:91)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.parse(QueryTranslatorImpl.java:292)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.doCompile(QueryTranslatorImpl.java:186)
at org.hibernate.hql.internal.ast.QueryTranslatorImpl.compile(QueryTranslatorImpl.java:141)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:115)
at org.hibernate.engine.query.spi.HQLQueryPlan.<init>(HQLQueryPlan.java:77)
at org.hibernate.engine.query.spi.QueryPlanCache.getHQLQueryPlan(QueryPlanCache.java:153)
at org.hibernate.internal.AbstractSharedSessionContract.getQueryPlan(AbstractSharedSessionContract.java:541)
at org.hibernate.internal.AbstractSharedSessionContract.createQuery(AbstractSharedSessionContract.java:650)
... 3 more
Exception in thread "main" java.lang.NullPointerException

at com.lrq.test.TestEmployee.main(TestEmployee.java:27)

原因主要是hql語句之間缺少空格引起了不合法異常

 String hql="select e from Employee e where e.empId>-1";
/*動態查詢*/
int count=0;
    if(employee.getEmpName()!=null&&!employee.getEmpName().equals("")){
        hql+="and e.empName=:eName";
count+=1;
}
    if(employee.getEmpPwd()!=null&&!employee.getEmpPwd().equals(""
)){ hql+="and e.empPwd=:ePwd"; count+=2; }

只要在 and 前面新增空格即可