我的数据库中存在一条记录,我多次交叉并且记录正确。我还确保在我的类中覆盖toString以获得我正在检索的数据的有意义的表示。
这是我用来从数据库中获取记录的hql
public List <Admin> getByAdminRole(int id) {
Query query = _sessionFactory.getCurrentSession()
.createQuery("select a.id from Admin a WHERE a.id = :id");
query.setParameter("role", id);
return query.list();
}
在我的控制器类中,我以这种方式调用hql方法
SupportDao _supportDao = new SupportDao();
List <Admin> add = _supportDao.getByAdminRole(1); //this line of code throws null pointer exception
System.out.println(">>>>>>>>>>> the value of add>>>>>>> " + add);
在研究解决nullpointer异常之后,我确保在模型类Admin.java中覆盖toString
@Override
public String toString(){
return this.id + this.name + this.getEmail() + this.getPassword() + this.role;
}
请问我的代码有什么问题?
答案 0 :(得分:2)
更改
query.setParameter("role", id);
到
query.setParameter("id", id);
如果想要返回List<Admin>
也修改,
.createQuery("select a.id from Admin a WHERE a.id = :id");
到
.createQuery("from Admin a WHERE a.id = :id");
如果存在单个ID,它将返回仅包含一个管理员的管理员列表
如果您想要单个管理员
return query.uniqueResult();
并根据要求更改返回类型
答案 1 :(得分:1)
由于您自己实例化SupportDAO
,您是否绝对,101%确定 _sessionFactory
中的SupportDAO
也会被实例化?
答案 2 :(得分:0)
在上面的代码中,您将“id”作为参数传递,但在setParameter方法中,您将通过“role”传递。
我猜你只需要用“id”传递它。