session-hql查询时出现空指针异常

问题描述

hql查询时出现空指针异常

代码:

 public Book findByBookNo(String bookNo) {
        // TODO Auto-generated method stub
        Session session = HibernateSessionFactory.getSession();
        String hql="from Book as book where book.bookNo=:bookNo";
        Query query =session.createSQLQuery(hql);
        query.setString("bookNo", bookNo);
        List<Book> books = query.list();
        HibernateSessionFactory.closeSession();
        if(books.size()>0){
            return books.get(0);
        }
        else{
            return null;
        }
    }

出现空指针异常异常如下:

 java.lang.NullPointerException
    com.Dao.BookDAOImpl.findByBookNo(BookDAOImpl.java:29)
    com.Service.BookServiceImpl.inputBook(BookServiceImpl.java:14)
    com.Action.BookInputAction.execute(BookInputAction.java:37)
    sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    java.lang.reflect.Method.invoke(Method.java:606)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:452)
    com.opensymphony.xwork2.DefaultActionInvocation.invokeActionOnly(DefaultActionInvocation.java:291)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:254)
    com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:176)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:263)
    org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:68)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:133)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:207)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:190)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.MultiselectInterceptor.intercept(MultiselectInterceptor.java:75)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:94)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:243)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:100)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:141)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:267)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:142)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:166)
    com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:98)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:176)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:164)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:190)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:187)
    com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:248)
    org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:52)
    org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:485)
    org.apache.struts2.dispatcher.ng.ExecuteOperations.executeAction(ExecuteOperations.java:77)
    org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter.doFilter(StrutsPrepareAndExecuteFilter.java:91)

note The full stack trace of the root cause is available in the Apache Tomcat/7.0.56 logs.

解决方案

你的判断books为空是有问题的。
如果books为null时,books.size()就直接报错了,根本不会到else里去。
在判断时,最最重要的是先判断是否为null,而不是先调用方法(如size())

解决方案二:

不是这个问题,问题是 Query query =session.createSQLQuery(hql);这一句就出错误了

时间: 2024-11-02 09:19:41

session-hql查询时出现空指针异常的相关文章

[NHibernate]HQL查询

目录 写在前面 文档与系列文章 查询的几种方式 HQL查询 一个例子 总结 写在前面 上篇文章介绍了nhibernate在项目中的基本配置,包括数据库连接字符串的设置,映射文件的配置及需注意的地方,这篇文章将介绍nhibernate的查询方法. 文档与系列文章 [Nhibernate]体系结构 [NHibernate]ISessionFactory配置 [NHibernate]持久化类(Persistent Classes) [NHibernate]O/R Mapping基础 [NHiberna

s2sh-S2SH框架中用session.createQuery(hql)查询出异常.

问题描述 S2SH框架中用session.createQuery(hql)查询出异常. 本人搭了个s2sh的框架,在用session.createQuery(hql)查询的时候出现异常,起先我以为是session未获取到,后来验证session是获取到了的,传入的参数也是获取到了的,但是还是有异常.代码如下,里面做了大量的打印语句来验证对象是否为空.public User findUser(User user) { if(user!=null){ Session session=this.get

使用hibernate的sum()查询时,新生成的sum()属性如何对应POJO类的属性?

问题描述 [size=medium]我用hibernate逆向工程生成了一个表stock对应POJO类.表的字段有name(vchar),value(number),id(vchar),主键为id对应POJO类的属性为name(String),value(double),id(String).现在我需要做查询 select id,sum(value) from stock group by id但是hibernate查询时一般都是from stock where ... 即查询的属性可以对应到P

ssh2环境下hql查询

问题描述 刚接触ssh2,自己写了个注册登录模块,注册很正常,插入数据也没有问题,但是在登录验证时,无法用hql查询,后面的打印语句也不能执行,不知道是不是我的hql有问题,顺便问下,spring整合hibernate之后hql的写法是不是与单纯hibernate环境下写法不一样?下面是我的写的dao源码,请大神帮忙看下是什么问题,搞了一下午了没头绪packageshopping.daoImpl;importjava.util.ArrayList;importjava.util.List;imp

ssh-使用SSH框架,hql查询时候语句有问题,怎么修改????

问题描述 使用SSH框架,hql查询时候语句有问题,怎么修改???? org.springframework.orm.hibernate3.HibernateQueryException: Path expected for join! [select a.title,a.docSize,a.createTime,b.value,c.value from com.aodong.juice.wendang.entity.JuiceDocument as a left join JuiceCombo

hql-一个关于HQL查询语句的问题

问题描述 一个关于HQL查询语句的问题 查询一个实体类的部分属性,比如,这个实体类中有另外的一个实体类,但不想去查询这个实体类,只想查询原来实体类的私有属性,应该怎么写语句? 解决方案 可以直接写SQL的,查询字段只查询某些属性就可以了.类似: session.createQuery("select username,age from User where id=2");

脚本-oracle条件查询,才能查询时不区分大小写

问题描述 oracle条件查询,才能查询时不区分大小写 Oracle 默认是区分大小写.如果不要区分,就要额外的设置. 下面就是不区分的脚本设置: ALTER SESSION SET NLS_COMP=ANSI; ALTER SESSION SET NLS_SORT=binary_ci;不过这个是在当前会话上,也就是说在每次发起查询的时候都需要执行这个才能起作用的.那么在java中该怎么设置才能得到所需的结果 解决方案 oracle查询区分大小写查询区分大小写查询区分大小写 解决方案二: sql

select-Hibernate 一个实体 对应多个 Table, 查询时导致数据发生 交叉 混乱, 求大神赐教

问题描述 Hibernate 一个实体 对应多个 Table, 查询时导致数据发生 交叉 混乱, 求大神赐教 做统计,每天生成一个统计表在DB中,每个表结果当然就一样了,用的Hibernate 配置文件如下 </class> 然后查询的时候代码 如下: public List<Stat> statQuery(String tableName, String filter) throws Exception { List<Stat> datas = null; try {

entity-hibernate查询时Criteria怎么根据级联的两个类里的属性进行查询?

问题描述 hibernate查询时Criteria怎么根据级联的两个类里的属性进行查询? 有3个表,A,B,C, 关系如下: A-->List,B属性有time等; A-->List,C属性有time等 Java代码: Entity: @OneToMany(fetch = FetchType.EAGER) @JoinColumn(name = "axxx_id") @Fetch(FetchMode.SELECT) public List getB() { return b;