HibernateTemplate为null

时间:2012-05-26 17:45:29

标签: spring hibernate

我正在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();
        }
    }
}

2 个答案:

答案 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