用spring注入sessionfactory,总是null,请教大家帮我看看是什么问题

用ssh做的一个小东西,写了泛型dao,然后继承了hibernatedaosupport,然而
在方法里面用getHibnerateTemplate()时总是null。
我用main方法测试都是成功注入的,还有在其它地方自己new一个然后传入sessionFactory,输出sessionFactory和getHibneratemTemplate都是有值的,但是进入方法总是null,我试了一天都解决不了。
前提:我的所有包都引入好了,包括互相协调的包,由于太多,我就贴了一些相关的方法代码,请大家帮我看看。

另外,还有没有更好的写法?或者比hibernateDaoSupport更好用的模板,有的话,请指点一下,谢谢

这个是BaseDao
public interface BaseDao {
void save(T entity);
void update(T entity);
List findAll(Class entityClass);


这是BaseDaoImpl
public class BaseDaoImpl
extends HibernateDaoSupport implements BaseDao {

@Override
public void save(T entity) {
    getHibernateTemplate().save(entity); 
}

@Override
public void update(T entity) {
    getHibernateTemplate().update(entity);

@Override
public List findAll(Class entityClass) {
String hql = "from " + entityClass;
System.out.println("template---"+getHibernateTemplate());
System.out.println("hql---"+hql);
System.out.println("sessionFactory---"+super.getSessionFactory());
return (List)getHibernateTemplate().find(hql);
}


这是BaseService
public interface BaseService {
void save(T entity);
void update(T entity);
List findAll(Class entityClass);


这是BaseServiceImpl

public class BaseServiceImpl
implements BaseService {

private BaseDao<T , ID> baseDao;

public void setBaseDao(BaseDao<T , ID> baseDao){
    this.baseDao = baseDao;
}

@Override
public void save(T entity) {
    baseDao.save(entity);
}

@Override
public void update(T entity) {
    baseDao.update(entity);
}

@Override
public List<T> findAll(Class<T> entityClass) {
    return baseDao.findAll(entityClass);
}

这是web.xml

Struts2
org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter


Struts2
/*


org.springframework.web.context.ContextLoaderListener


contextConfigLocation
classpath:applicationContext.xml


这是applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
xmlns="http://www.springframework.org/schema/beans"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.2.xsd">

<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <property name="configLocation" value="classpath:hibernate.cfg.xml">
    </property>
</bean> 

<bean id="baseDaoImpl" class="com.lamp.dao.impl.BaseDaoImpl">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

``` scope="prototype">



这是action的代码
public class ShowAllContactAction extends ActionSupport{
    private List<Contact> resultAllContactList;
    private ContactServiceImpl contactServiceImpl;

    public void setContactServiceImpl(ContactServiceImpl contactServiceImpl){
        this.contactServiceImpl = contactServiceImpl;
    }

    public String execute(){
        resultAllContactList = contactServiceImpl.findAll(Contact.class);
        ActionContext.getContext().put("resultAllContactList" , resultAllContactList);
        return "SUCCESS";
    }
}

这是hibernate配置文件
<hibernate-configuration>
    <session-factory>
        <property name="show_sql">true</property>

        <property name="connection.url">jdbc:mysql://localhost:3306/sanke_daily</property>
        <property name="connection.username">root</property>
        <property name="connection.password">root</property>
        <property name="driver_class">com.mysql.jdbc.Driver</property>
        <property name="dialect">org.hibernate.dialect.MySQLDialect</property>
        <mapping resource="com/lamp/entity/Contact.hbm.xml"/>
    </session-factory>
</hibernate-configuration>

这是struts.xml
<action name="showAllContactAction" class="showAllContactAction">
            <result name="SUCCESS">/jsp/contact/showAllContactSuccess.jsp</result>
        </action>

另外,ContactBaseDao、ContactBaseDaoImpl和ContactService、ContactServiceImpl都没有新加的特别的方法,所以都是空的



0

7个回答




是给BaseDaoImpl中的sessionFactory注入值
而BaseDaoImpl中的getHibernateTemplate()是获取HibernateDaoSupport 中的 sessionFactory 的值
所以你获取的为空
你把上面的换成这个看看,把hibernate换成你的版本,我这个是hibernate3



我也是新手,你可以试试。

0

图片说明

0
jlu_lamp_lamp
jlu_lamp_lamp 我按你的方法试了,去掉了basedaoimpl,改成了hibernateTemplate,还是null,我在想是不是注入是正确的,只是注入后的赋值或者初始化出问题了,帮忙再看看
大约 3 年之前 回复

class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">


class="org.springframework.orm.hibernate5.HibernateTemplate">




0

applicationContext.xml


struts.xml



然后showAllContactAction.java里的也要改下,试试吧

0

图片说明

0
jlu_lamp_lamp
jlu_lamp_lamp 试了,还是不行
大约 3 年之前 回复

请问一下,除了HibernateDaoSupport,还有其它好用的类吗

0

图片说明
同样的问题,Spring 注解注入SessionFactory 空指针异常

0
qq_34173920
大火yzs 楼主解决的话,麻烦分下下,百度两天了,,
10 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!