org.hibernate.hql.ast.QuerySyntaxException: unexpected token: and near line 1, c
类方法:
public Users getAdminList(Users users) {
StringBuffer hqlQuery=new StringBuffer();//注意对比StringBuffer和String的区别
hqlQuery.append("from USERS u where ");
if(users.getUserID()!=null){
hqlQuery.append("and (u.userID=:userID)");
}else{//如果id不存在,才查询其他属性
if(users.getUserName()!=null){
hqlQuery.append("and (u.userName=:userName)");//加括号是为了方式忘记加空格和破坏优先级,例如
if(users.getPassword()!=null){//如果用户为null,那么就不必再查询密码了
hqlQuery.append("and (u.password=:password)");
}
}
}
String hql=hqlQuery.toString();
Object o=BaseHibernateDAO.selectHQLObject(hql,users);
if(o!=null){
return (Users)o;
}else{
return null;
}
}
运行时出错:
org.hibernate.hql.ast.QuerySyntaxException: unexpected token: and near line 1, column 20 [from USERS u where and (u.userName=:userName)and (u.password=:password)]
Users.hbm.xml文件
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class lazy="true" name="entity.Users" table="users">
<id name="userID" type="java.lang.Integer">
<column name="userID"/>
<generator class="native">
</generator>
</id>
<property generated="never" lazy="false" name="userName" type="java.lang.String">
<column length="20" name="userName" not-null="false"/>
</property>
<property generated="never" lazy="false" name="password" type="java.lang.String">
<column length="20" name="password" not-null="false"/>
</property>
</class>
</hibernate-mapping>
实体类是:Users.java