从数据库hibernate hql检索记录时出现空指针异常

时间:2016-10-07 12:20:56

标签: java spring hibernate hql

我的数据库中存在一条记录,我多次交叉并且记录正确。我还确保在我的类中覆盖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;
    }

请问我的代码有什么问题?

3 个答案:

答案 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”传递它。