论坛首页 入门技术论坛

Hibernate3报空指针错误.<急>

浏览 4072 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-10-26  
java 代码
  1. package com.dn.dao;   
  2.   
  3. import java.util.Collection;   
  4. import java.util.List;   
  5. import java.util.ArrayList;   
  6. import org.hibernate.Criteria;   
  7. import org.hibernate.Query;   
  8. import org.hibernate.Session;   
  9. import org.springframework.orm.hibernate3.support.HibernateDaoSupport;   
  10. import org.springframework.orm.hibernate3.SessionFactoryUtils;   
  11.   
  12.   
  13. public class BaseDAO extends HibernateDaoSupport implements IBaseDAO {   
  14.   
  15.     public boolean create(Object entity) {   
  16.         try {   
  17.             super.getHibernateTemplate().save(entity);   
  18.             return true;   
  19.         } catch (Exception e) {   
  20.             return false;   
  21.         }   
  22.     }   
  23.   
  24.     public Session openSession() {   
  25.            
  26.             return SessionFactoryUtils.getSession(super.getHibernateTemplate().getSessionFactory(),false);   
  27.     }   
  28.   
  29.     public Query getQuery(String sql) {   
  30.         Session session = this.openSession();   
  31.         return session.createQuery(sql);   
  32.     }   
  33.   
  34.     public Criteria getCriteria(Class clazz) {   
  35.         Session session = this.getSession();   
  36.         return session.createCriteria(clazz);   
  37.     }   
  38.   
  39.     public boolean update(Object entity) {   
  40.         try {   
  41.             super.getHibernateTemplate().update(entity);   
  42.             return true;   
  43.         } catch (Exception e) {   
  44.             return false;   
  45.         }   
  46.     }   
  47.   
  48.     public boolean delete(Object entity) {   
  49.         try {   
  50.             super.getHibernateTemplate().delete(entity);   
  51.             return true;   
  52.         } catch (Exception e) {   
  53.             return false;   
  54.         }   
  55.     }   
  56.   
  57.     public boolean deleteAll(Class clazz) {   
  58.         // TODO 自动生成方法存根   
  59.         return false;   
  60.     }   
  61.   
  62.     public boolean deleteAll(Collection entities) {   
  63.         // TODO 自动生成方法存根   
  64.         return false;   
  65.     }   
  66.   
  67.     public List LoadAll(Class clazz) {   
  68.         // TODO 自动生成方法存根   
  69.         return null;   
  70.     }   
  71.   
  72.     public Object loadByKey(Class clazz, String keyName, Object keyValue) {   
  73.         // TODO 自动生成方法存根   
  74.         return null;   
  75.     }   
  76.   
  77.     public Object getByPk(Class clazz, Integer id) {   
  78.         return (Object)super.getHibernateTemplate().get(clazz,id);   
  79.     }   
  80.   
  81.     public List find(String queryString) {   
  82.         List list = null;   
  83.         try {   
  84.             list =super.getHibernateTemplate().find(queryString);   
  85.             return list;   
  86.         } catch (Exception e) {   
  87.             return list;   
  88.         }   
  89.     }   
  90.   
  91.     public List find(String queryString, Object param) {   
  92.         List list = null;   
  93.         try {   
  94.             list = super.getHibernateTemplate().find(queryString,param);   
  95.             return list;   
  96.         } catch (Exception e) {   
  97.             return list;   
  98.         }   
  99.     }   
  100.   
  101.     public List find(String queryString, Object[] params) {   
  102.         List list = null;   
  103.         try {   
  104.             list = super.getHibernateTemplate().find(queryString,params);   
  105.             return list;   
  106.         } catch (Exception e) {   
  107.             StringBuffer buffer = new StringBuffer();   
  108.             for(int i=0;i<params.length;i++){   
  109.                 buffer.append(params[i]);   
  110.                 buffer.append(" ");   
  111.             }   
  112.             return list;   
  113.         }   
  114.     }   
  115.   
  116.     /**  
  117.      * @param args  
  118.      */  
  119.     public static void main(String[] args) {   
  120.         BaseDAO bd = new BaseDAO();   
  121.         List list = bd.find("select l.name from Login as l");   
  122.         System.out.println(list.size());   
  123.   
  124.     }   
  125.   
  126. }   

 

 

我只是测试执行main函数就报错误>>>

java 代码
  1. Exception in thread "main" java.lang.NullPointerException   
  2.     at com.dn.dao.BaseDAO.main(BaseDAO.java:122)   

 

 

不知道该怎么解决啊..请大家..本人刚用hibernate时间不是蛮长..

谢谢..

   发表时间:2007-10-26  
session还没开。。。。
0 请登录后投票
   发表时间:2007-10-26  
那我现在该怎么操作呢...这个大哥可以说滴清楚点哈..
0 请登录后投票
   发表时间:2007-10-26  
那我现在把main函数里面换了一个有打开session的..
public static void main(String[] args) {
		
		BaseDAO bd = new BaseDAO();
		List list = bd.getQuery("select l.name from Login as l").list();
		
		System.out.println(list.size());

	}


还是一样报错误..错误如下:
Exception in thread "main" java.lang.NullPointerException
	at com.dn.dao.BaseDAO.openSession(BaseDAO.java:25)
	at com.dn.dao.BaseDAO.getQuery(BaseDAO.java:29)
	at com.dn.dao.BaseDAO.main(BaseDAO.java:123)



急切盼望解决哈...
0 请登录后投票
   发表时间:2007-10-27  
过客给您的几个问题

1、
既然使用了HibernateDaoSupport ,还有什么理由写自己的openSession()方法?

2、
只要new 一个DAO,就能连上心中想要的那个数据库?
(默默念到:我想连到美国国防部的那个数据库)

由此,我可以判断,你很痛苦。看贴的我也很郁闷。

0 请登录后投票
   发表时间:2007-10-27  
1楼:哦
2楼:霍
3楼:厚
4楼:哈
5楼:嘿

纯属倒乱,请BS~

0 请登录后投票
   发表时间:2007-10-27  
引用

1、
既然使用了HibernateDaoSupport ,还有什么理由写自己的openSession()方法?

2、
只要new 一个DAO,就能连上心中想要的那个数据库?
(默默念到:我想连到美国国防部的那个数据库)


呵呵..
Qieqie:
让你见笑了..

我其实应该先加载applicationContext.xml文件的.是吧..不然也就连接不上数据库了耶..范了这么一个低级错误..谢谢提醒..
至于第一个问题为什么要写openSession()方法,其实我也不是很了解spring是如何控制反转的.

我运用
ApplicationContext ac = new FileSystemXmlApplicationContext("classpath:applicationContext.xml");

加载spring配置文件..
但是好像还得修改下哪里的配置才可以JAVA运用程序的形式运行一个类里面的main函数..至于修改那个地方.偶很迷惑.望指点..applicationContext.xml文件贴出来大家参考参考..
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

	<!--数据源datasource的声明-->
	<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
		<property name="driverClassName"><value>oracle.jdbc.driver.OracleDriver</value></property>
		<property name="url"><value>jdbc:oracle:thin:@144.20.80.179:1521:oratest1</value></property>
		<property name="username"><value>test</value></property>
		<property name="password"><value>test</value></property>		
	</bean>
	
	<!--Session Factory声明-->
	<bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
		<property name="dataSource">
			<ref local="dataSource" />
		</property>
		<property name="mappingResources">
			<list>
			<value>com/dn/struts/entity/Login.hbm.xml</value>
			</list>
		</property>
		<property name="hibernateProperties">
			<props>
				<prop key="hibernate.dialect">org.hibernate.dialect.Oracle9Dialect</prop>
				<prop key="hibernate.show_sql">true</prop>
			</props>
		</property>
	</bean>
	
	<!--定义一个hibernate 拦截器 -->
	<bean id="hibernateInterceptor" class="org.springframework.orm.hibernate3.HibernateInterceptor">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>

	<!-- hibernate 事务-->
	<bean id="myTransactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
		<property name="sessionFactory">
			<ref local="sessionFactory" />
		</property>
	</bean>
	
	<!--真正的DAO层-->
	<bean id="basedaoTarget" class="com.dn.dao.BaseDAO">
		<property name="sessionFactory">
			<ref bean="sessionFactory" />
		</property>
	</bean>

	<!--代理的DAO层 -->
	<bean id="basedao" class="org.springframework.aop.framework.ProxyFactoryBean">
		<property name="proxyInterfaces">
			<value>com.dn.dao.IBaseDAO</value>
		</property>
		<property name="interceptorNames">
			<list>
				<value>hibernateInterceptor</value>
				<value>basedaoTarget</value>
			</list>
		</property>
	</bean>
	
	<!-- 真正的服务层 修改bean中id属性和class属性-->
	<bean id="userServiceTarget" class="com.dn.struts.service.UserService">
		<property name="basedao">
			<ref bean="basedao" />
		</property>
	</bean>

	<!-- 代理的服务层 修改bean中id属性和ref中的bean的属性并且等于真正的服务层的bean的id属性-->
	<bean id="userService" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
		<property name="transactionManager">
			<ref bean="myTransactionManager" />
		</property>
		<property name="target">
			<ref bean="userServiceTarget" />
		</property>
		<property name="transactionAttributes">
			<props>
				<prop key="get*">PROPAGATION_SUPPORTS</prop>
				<prop key="*">PROPAGATION_REQUIRED</prop>
			</props>
		</property>
	</bean>
	
	<!-- strtus控制器的配置 ref中的bean属性等于代理层中的bean中的id属性-->
	<bean name="/login" class="com.dn.struts.action.LoginAction">
		<property name="userService">
			<ref bean="userService" />
		</property>
	</bean>
	
</beans>


谢谢大家...
0 请登录后投票
论坛首页 入门技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics