jlu_lamp_lamp 2016-06-12 08:55 采纳率: 0%
浏览 2447

用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都没有新加的特别的方法,所以都是空的



  • 写回答

7条回答 默认 最新

  • 关注




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



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

    评论

报告相同问题?

悬赏问题

  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 ubuntu系统下挂载磁盘上执行./提示权限不够
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)
  • ¥15 用前端向数据库插入数据,通过debug发现数据能走到后端,但是放行之后就会提示错误