0

我正在 STS 上制作一个 Web 应用程序。我正在使用 Spring 3.1.0 和 HIbernate 4.0.1 的罐子。我在项目构建路径中包含 jars。在 DAO 层中,当我尝试创建 HibernateTemplate 对象时,它没有被实例化,它在那里为空。我不明白为什么它是空的。

早些时候我遇到了一个错误,比如 NoClassDefinitionFound: org.springframework.orm.hibernate3.HibernateTemplate....然后我将这些 jars 包含在 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();
        }
    }
}

4

2 回答 2

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.

最后,您通常不应该 catch NullPointerException,但如果出于调试目的,我理解这一点。

于 2012-05-26T17:50:24.083 回答
0

您正在使用 Hibernate 4,并且正在使用org.springframework.orm.hibernate3.HibernateTemplateHibernate 3 包。

不再支持此模板。您可以进行声明式事务管理

于 2012-05-26T17:57:51.653 回答