我在用hibernate+struts+spring框架做项目的时候,执行一个查询的语句,结果到获得session的时候就是Unhandled Exception thrown: class java.lang.NullPointerException的异常,大家帮我看看是什么错误!!!谢谢啦,在线等!!!
以下是出错代码部分:
public void listByPage(final String hql, final PageResult pageResult) {
super.getHibernateTemplate().executeFind(new HibernateCallback() (出错地方){ public Object doInHibernate(Session s) throws HibernateException {
if (null == hql) {
return null;
}
Query query = s.createQuery(hql);
query.setFirstResult(pageResult.getFirstRec());
query.setMaxResults(pageResult.getPageSize());
List ret = query.list();
pageResult.setList(ret); String queryString = "";
if (hql.toUpperCase().indexOf("SELECT") != -1) {
int i = query.getQueryString().toUpperCase()
.indexOf("FROM");
queryString = "Select count(*) "
+ hql.substring(i, hql.length());
} else {
queryString = "Select count(*) " + hql;
}
// 去掉ORDER BY 的部分
int j = queryString.toUpperCase().lastIndexOf("ORDER");
if (j != -1) {
queryString = queryString.substring(0, j);
}
Query cquery = s.createQuery(queryString);
cquery.setCacheable(true);
int recTotal = ((Integer) cquery.iterate().next()).intValue();
pageResult.setRecTotal(recTotal);
return null;
} }); }
以下是出错代码部分:
public void listByPage(final String hql, final PageResult pageResult) {
super.getHibernateTemplate().executeFind(new HibernateCallback() (出错地方){ public Object doInHibernate(Session s) throws HibernateException {
if (null == hql) {
return null;
}
Query query = s.createQuery(hql);
query.setFirstResult(pageResult.getFirstRec());
query.setMaxResults(pageResult.getPageSize());
List ret = query.list();
pageResult.setList(ret); String queryString = "";
if (hql.toUpperCase().indexOf("SELECT") != -1) {
int i = query.getQueryString().toUpperCase()
.indexOf("FROM");
queryString = "Select count(*) "
+ hql.substring(i, hql.length());
} else {
queryString = "Select count(*) " + hql;
}
// 去掉ORDER BY 的部分
int j = queryString.toUpperCase().lastIndexOf("ORDER");
if (j != -1) {
queryString = queryString.substring(0, j);
}
Query cquery = s.createQuery(queryString);
cquery.setCacheable(true);
int recTotal = ((Integer) cquery.iterate().next()).intValue();
pageResult.setRecTotal(recTotal);
return null;
} }); }
<!-- DataSource -->
<bean id="dataSource"
class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver"/>
<property name="url"
value="jdbc:sqlserver://localhost:1433;DatabaseName=MyOffice;SelectMethod=cursor"/>
<property name="username" value="sa"/>
<property name="password" value="123456"/>
</bean> <!-- SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="dataSource">
<ref local="dataSource"/>
</property>
<property name="hibernateProperties">
<props>
<prop key="hibernate.dialect">
org.hibernate.dialect.SQLServerDialect
</prop>
<prop key="hibernate.show_sql">
true
</prop>
</props>
</property>
<property name="mappingResources">
<list>
<value>org/jb/y272/team4/entity/UserInfo.hbm.xml</value>
<value>org/jb/y272/team4/entity/FileInfo.hbm.xml</value>
<value>org/jb/y272/team4/entity/Schedule.hbm.xml</value>
<value>org/jb/y272/team4/entity/ReadCommonMessage.hbm.xml</value>
<value>org/jb/y272/team4/entity/ManualSign.hbm.xml</value>
<value>org/jb/y272/team4/entity/MyNote.hbm.xml</value>
<value>org/jb/y272/team4/entity/LoginLog.hbm.xml</value>
<value>org/jb/y272/team4/entity/DepartInfo.hbm.xml</value>
<value>org/jb/y272/team4/entity/Message.hbm.xml</value>
<value>org/jb/y272/team4/entity/OperateLog.hbm.xml</value>
<value>org/jb/y272/team4/entity/AccessoryFile.hbm.xml</value>
<value>org/jb/y272/team4/entity/BranchInfo.hbm.xml</value>
<value>org/jb/y272/team4/entity/FileTypeInfo.hbm.xml</value>
<value>org/jb/y272/team4/entity/MeetingInfo.hbm.xml</value>
<value>org/jb/y272/team4/entity/MessageToUser.hbm.xml</value>
<value>org/jb/y272/team4/entity/MessageType.hbm.xml</value>
<value>org/jb/y272/team4/entity/PreContract.hbm.xml</value>
<value>org/jb/y272/team4/entity/RoleInfo.hbm.xml</value>
<value>org/jb/y272/team4/entity/RoleRight.hbm.xml</value>
<value>org/jb/y272/team4/entity/Sysdiagrams.hbm.xml</value>
<value>org/jb/y272/team4/entity/SysFun.hbm.xml</value>
<value>org/jb/y272/team4/entity/UserState.hbm.xml</value>
<value>org/jb/y272/team4/entity/WorkTime.hbm.xml</value>
</list>
</property>
</bean>
<bean id="myHibTxManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<tx:advice id="txAdvice" transaction-manager="myHibTxManager">
<tx:attributes>
<!-- 对get/load/search开头的方法要求只读事务 -->
<tx:method name="get*" propagation="SUPPORTS" read-only="true" />
<tx:method name="load*" propagation="SUPPORTS" read-only="true" />
<tx:method name="search*" propagation="SUPPORTS" read-only="true" />
<!-- 对其它方法要求事务 -->
<tx:method name="*" propagation="REQUIRED" />
</tx:attributes >
</tx:advice>
<!-- <aop:config>-->
<!--
只对GoodsBiz添加事务支持,因为前面配置的transactionManager
是专对Hibernate的事务管理器 。
-->
<!-- <aop:pointcut id="serviceMethods" -->
<!-- expression="execution(* org.jb.y272.team4.biz.*.*(..))" /> -->
<!-- 织入 -->
<!-- <aop:advisor advice-ref="txAdvice" pointcut-ref="serviceMethods" /> -->
<!--</aop:config> -->
super.getHibernateTemplate()可能是个空的对象?
/*
* (非 Javadoc)
*
* @see org.jb.common.dao.CommonDAO#listByPage(java.lang.String,
* org.jb.common.util.PageResult)
*
* @SuppressWarnings("unchecked") public void listByPage(String hql,
* PageResult pageResult)
{ if (null==hql){ return ; }
Query query = this.getSession().createQuery(hql);(这句就是出错的地方,提示说session为空,抛出空异常!)
* query.setFirstResult(pageResult.getFirstRec());
* query.setMaxResults(pageResult.getPageSize()); List ret = query.list();
* pageResult.setList(ret);
*
* String queryString = ""; if (hql.toUpperCase().indexOf("SELECT") != -1) {
* int i = query.getQueryString().toUpperCase().indexOf("FROM"); queryString =
* "Select count(*) " + hql.substring(i,hql.length()); } else { queryString =
* "Select count(*) " + hql; } // 去掉ORDER BY 的部分 int j =
* queryString.toUpperCase().lastIndexOf("ORDER"); if (j!=-1){ queryString =
* queryString.substring(0, j); } Query cquery =
* this.getSession().createQuery(queryString); cquery.setCacheable(true);
* int recTotal = ((Integer)cquery.iterate().next()).intValue();
* pageResult.setRecTotal(recTotal); }
*/