急。。再现等 关于JSF+Spring+hibernate整合开发中getHibernateTemplate().find方法出现空指针

lbaj123 2008-05-27 03:15:29
有个UserDao接口中有
public UserInfo Login(String account);

还有个UserDaoHibernateImpl
public class UserDAOHibernateImpl extends HibernateDaoSupport implements
UserDAO {

public UserInfo Login(String account){
String hql = "from UserInfo where account=?";
List list = getHibernateTemplate().find(hql, account);
UserInfo user = new UserInfo();
user=list.get(0);
return user;
}
}
在Spring的配置文件中
<!-- 配置hibernate开始 -->
<bean id="DataSource"
class="org.apache.commons.dbcp.BasicDataSource">
<property name="driverClassName"
value="com.microsoft.sqlserver.jdbc.SQLServerDriver">
</property>
<property name="url" value="jdbc:sqlserver://localhost:1433;DatabaseName=testEpet"></property>
<property name="username" value="sa"></property>
<property name="password" value=""></property>
</bean>

<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
<property name="dataSource">
<ref bean="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>
com/ryhuua/epet/model/entity/UserInfo.hbm.xml
</value>

</list>
</property>
</bean>
<!-- 配置hibernate结束 -->

<bean id="jdbcExceptionTranslator"
class="org.springframework.jdbc.support.SQLErrorCodeSQLExceptionTranslator">
<property name="dataSource">
<ref bean="dataSource" />
</property>
</bean>

<bean id="hibernateTemplate"
class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
<property name="jdbcExceptionTranslator">
<ref bean="jdbcExceptionTranslator" />
</property>
</bean>

<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory" />
</bean>


<bean id="userDao"
class="com.ryhuua.epet.model.dao.hibernateImpl.UserDAOHibernateImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate" />
</property>
</bean>

<bean id="userService"
class="com.ryhuua.epet.model.service.Impl.UserServiceHibernateImpl">
<property name="transactionManager">
<ref local="transactionManager" />
</property>
<property name="userDao"><ref local="userDao"/></property>

</bean>

我调用UserDaoHibernateImpl中的login()方法时就抛出空指针异常,实在是不解.请高手帮忙下。

...全文
405 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
jeff1709 2008-05-28
  • 打赏
  • 举报
回复
list = getHibernateTemplate().find(hql, account);
空指针的话就 二个地方,getHibernateTemplate(),account,你DEBUG到这的时候看一下哪个没有值就好找了.
siyue_qi 2008-05-28
  • 打赏
  • 举报
回复
public class UserDAOHibernateImpl extends HibernateDaoSupport implements
UserDAO {

public UserInfo Login(String account){
String hql = "from UserInfo where account=?";
List list = getHibernateTemplate().find(hql, account);
UserInfo user = new UserInfo();
user=list.get(0);
return user;
}
}
改成:

public class UserDAOHibernateImpl extends HibernateDaoSupport implements
UserDAO {

public UserInfo Login(String account){
String hql = "from UserInfo where account=?";
Query queryObject = getSession().createQuery(hql);
queryObject.setParameter(0, account);
List userList = queryObject.list();
UserInfo user = new UserInfo();
user=list.get(0);
return user;
}
}

lyboyc 2008-05-28
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 lbaj123 的回复:]
ApplicationContext.xml是在是用相对路径还是绝对的路径呢?
绝对路径是。/pet/WebRoot/WEB-INF/applicationContext.xml
[/Quote]
随便了,最好相对。
你先用绝对路径试试对不对
lbaj123 2008-05-28
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 siyue_qi 的回复:]
public class UserDAOHibernateImpl extends HibernateDaoSupport implements
UserDAO {

public UserInfo Login(String account){
String hql = "from UserInfo where account=?";
List list = getHibernateTemplate().find(hql, account);
UserInfo user = new UserInfo();
user=list.get(0);
return user;
}
}
改成:


Java codepublic class UserDAOHibe…
[/Quote]
这样改了也不行。。我想可能是没有得到session看了下书上说的。要先对hibernateTemplate进行获得session的。
lbaj123 2008-05-27
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 lyboyc 的回复:]
UserDaoHibernateImpl dao = new UserDaoHibernateImpl(); 这里不对!
你先改成下面的试试
static ApplicationContext ctx= new FileSystemXmlApplicationContext(
"/ApplicationContext.xml");//配置文件路径根据你的项目自己改/
UserDaoHibernateImpl dao = (UserDaoHibernateImpl) ctx.getBean("UserDaoHibernateImpl");
另外,getHibernateTemplate().find(hql, account); 先判断是否等于null再付值
[/Quote]
ApplicationContext.xml是在是用相对路径还是绝对的路径呢?
绝对路径是。/pet/WebRoot/WEB-INF/applicationContext.xml
lbaj123 2008-05-27
  • 打赏
  • 举报
回复
好的下午停电了。。现在才来。我去试试看
lyboyc 2008-05-27
  • 打赏
  • 举报
回复
UserDaoHibernateImpl dao = new UserDaoHibernateImpl(); 这里不对!
你先改成下面的试试
static ApplicationContext ctx= new FileSystemXmlApplicationContext(
"/ApplicationContext.xml");//配置文件路径根据你的项目自己改/
UserDaoHibernateImpl dao = (UserDaoHibernateImpl) ctx.getBean("UserDaoHibernateImpl");
另外,getHibernateTemplate().find(hql, account); 先判断是否等于null再付值
nicky_hk 2008-05-27
  • 打赏
  • 举报
回复
<bean id="userDao"
class="com.ryhuua.epet.model.dao.hibernateImpl.UserDAOHibernateImpl">
<property name="hibernateTemplate">
<ref bean="hibernateTemplate" />
</property>
</bean>


spring来管理bean的话,源代码里面需要set方法注入进去吧
lbaj123 2008-05-27
  • 打赏
  • 举报
回复
在UserInfo中的account 出现account cannot be resolved
M_song 2008-05-27
  • 打赏
  • 举报
回复
数据库里有数据没有?
另外debug,把重点字段加到watches里,看看到底哪个是null!
lbaj123 2008-05-27
  • 打赏
  • 举报
回复
我在这里测试的
public class UserDaoHibernateImpl extends HibernateDaoSupport implements
UserDao {

public UserInfo login(String account) {
String hql = "from UserInfo where account=?";
List list = new ArrayList();
list = getHibernateTemplate().find(hql, account);
UserInfo user = (UserInfo) list.get(0);

return user;
}
public static void main(String[] args) {
UserDaoHibernateImpl dao = new UserDaoHibernateImpl();
UserInfo user =dao.login("user");
System.out.println(user.getUname());
}

}

异常直接就是
Exception in thread "main" java.lang.NullPointerException
at com.ryhuua.pet.model.dao.hibernateImpl.UserDaoHibernateImpl.login(UserDaoHibernateImpl.java:17)
at com.ryhuua.pet.model.dao.hibernateImpl.UserDaoHibernateImpl.main(UserDaoHibernateImpl.java:24)
RainRainbow 2008-05-27
  • 打赏
  • 举报
回复
把异常信息贴出来,定位到具体哪行
lbaj123 2008-05-27
  • 打赏
  • 举报
回复
List list = getHibernateTemplate().find(hql, account);
这行的空指针我debug也直接抛出空指针
M_song 2008-05-27
  • 打赏
  • 举报
回复
首先要确定哪个是空指针.
1,String account会不会是;
2, List list 会不会是,数据库里没数据,查询不到.

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧