1、异常描述
org.hibernate.QueryException: Expected positional parameter count: 1, actual parameters: [] [from Student where name like ?]
备注:
此处hibernate版本号:3.6.10.Final
2、示例代码
2-1 StudentDao.java
public List<Student> findByName(String name){
Session session = sessionFactory.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 定义hql语句
String hql = "from Student where name = ?";
Query query = session.createQuery(hql);
List list = query.list();
transaction.commit();
return list;
}
2-2 测试类
@Test // 根据学生姓名查询所有学生信息
public void testFindByName(){
List<Student> list = studentDao2.findByName("张三");
for (Student student : list) {
System.out.println(student);
}
}
错误原因:在StudentDao.java中没有给问号占位符赋值。
3、解决方式
// 根据学生姓名查询学生信息
public List<Student> findByName(String name){
Session session = sessionFactory.getCurrentSession();
Transaction transaction = session.beginTransaction();
// 定义hql语句
String hql = "from Student where name = ?";
Query query = session.createQuery(hql);
// 问号占位符赋值
query.setString(0, name);
List list = query.list();
transaction.commit();
return list;
}
此文希望可以帮助到大家。如有错误,请指教。
如果大家还有其他的情况或者好的解决方法,也望指教,感谢阅读。