我正在STS上制作一个Web应用程序。我正在使用Spring 3.1.0和HIbernate 4.0.1的jar。我在项目构建路径中包含jar。 在DAO层中,当我尝试创建一个HibernateTemplate对象时,它没有实例化,它在那里是null。我不明白为什么它是null。
之前我收到了像NoClassDefinitionFound这样的错误:org.springframework.orm.hibernate3.HibernateTemplate ....然后我将这些jar包含在WEB-INF-> lib文件夹中,然后删除了这个错误,但仍然是hibernateTemplate对象是空值。关于项目文件夹中beans.xml的位置是否有任何问题。 ?任何人都可以帮助我。
下面是我的beans.xml和Userinfo.java的代码。
并[b]的beans.xml [/ B]
只有bean.xml的相关部分
<bean id="hibTemplateBean" class="org.springframework.orm.hibernate3.HibernateTemplate" >
<property name="sessionFactory" ref="sfBean" />
</bean>
并[b] UserinfoDao.java [/ B]
package com.home.dao;
import org.springframework.orm.hibernate3.HibernateTemplate;
import com.home.pojo.User;
public class UserinfoDao {
public UserinfoDao() {
super();
}
private static HibernateTemplate hibernateTemplate;
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
UserinfoDao.hibernateTemplate = hibernateTemplate;
}
public static void fetchUserInfo(){
try{
User user = (User)hibernateTemplate.get(User.class, 111);
}catch(NullPointerException npe){
npe.printStackTrace();
}
}
}
答案 0 :(得分:0)
您的版本让我相信您只是使用static
方法访问您的bean:
UserinfoDao.fetchUserInfo();
看起来你错过了Spring的几个关键点。首先,您不应该使用static
方法和字段,请尝试使用以下类:
public class UserinfoDao {
private HibernateTemplate hibernateTemplate;
public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
this.hibernateTemplate = hibernateTemplate;
}
public void fetchUserInfo(){
try{
User user = (User)hibernateTemplate.get(User.class, 111);
}catch(NullPointerException npe){
npe.printStackTrace();
}
}
}
现在你需要以某种方式获取Spring bean的实例。您不能简单地使用new UserinfoDao()
运算符。您必须以XML或通过注释声明您的bean(并声明对HibernateTemplate
的依赖。
最后你通常不应该抓住NullPointerException
,但是我知道这是为了ddebugging目的。
答案 1 :(得分:0)
您正在使用Hibernate 4,而您正在使用Hibernate 3软件包中的org.springframework.orm.hibernate3.HibernateTemplate
。
不再支持此模板。你可以declarative transaction management。