我遇到一个关于HibernateTemplate的问题,我发现必须这样使用它:
很明显第一个是getHibernateTemplate(),第二个的 ht对象是null所以不能用。也就是说必须通过getHibernateTemplate()方法才能使用HibernateTemplate ,不知道这是什么缘故?
HibernateTemplate本身就是通过HibernateDaoSupport的静态方法得到的,没有为什么把,spring就这样设计的。一般应该都是自己的DAO实现去继承HibernateDaoSupport,担心代码侵入就别用人家的支持类,自己写吧。

解决方案 »

  1.   

    我发现很多人都不喜欢用泛型参数,直接一个List传来传去的,请问这是为什么?
    要么是编程习惯不好,要么是JDK不支持范型
      

  2.   

    使用getHibernateTemplate().find查询用户,返回一个User的Object型List,我在Service层使用这个返回的List时是要先进行强制转换的,我为什么不在DAO层就把query方法的返回类型定义为List<User>呢?在方法中的getHibernateTemplate().find语句前面加上(List<User>)强制类型转换再返回这个List,这样Service层调用DAO得到的List就可以直接拿来用了
    那你DAO层又何必去定义一个List<Object>呢,直接定义成List<User>不就好了。DAO就是要通用,你这样就不叫DAO了,建议你可以定义这样一个接口:
    public <T> List<T> getListDatas(String hql, Object... args);
      

  3.   

    我在Spring的配置文件里面配了sessionFactory的,set方法什么的都有,为什么会是null呢?
      

  4.   

    我没有在DAO层定义一个List<Object>,我是说执行查询语句后返回的就是默认的List<Object>。
    你说的这个接口,我没明白你的意思。
    我想了想,要不还是把强制转换放到Service层吧,毕竟这也算是逻辑处理。
      

  5.   

    我在Spring的配置文件里面配了sessionFactory的,set方法什么的都有,为什么会是null呢?
    你上面的代码中,不用定义sessionFactory都不会出错,getHibernateTemplate()已经自动注入了sessionFactory,应该是实现机制的问题吧,具体你可以看看源码。
      

  6.   

    不在Spring的配置文件里面配sessionFactory也能注入?
    兄弟你没有正眼看我的回复啊。
      

  7.   

    不在Spring的配置文件里面配sessionFactory也能注入?
    兄弟你没有正眼看我的回复啊。
    你没明白意思,不在类里面定义,配置文件里肯定要有,不然怎么注入。
      

  8.   

    不在Spring的配置文件里面配sessionFactory也能注入?
    兄弟你没有正眼看我的回复啊。
    你没明白意思,不在类里面定义,配置文件里肯定要有,不然怎么注入。
    不在类里面定义sessionFactory,则不能定义getHibernateTemplate()方法,没有这个方法,后面的.find()以及.save()方法从哪里来?
      

  9.   

    不在Spring的配置文件里面配sessionFactory也能注入?
    兄弟你没有正眼看我的回复啊。
    你没明白意思,不在类里面定义,配置文件里肯定要有,不然怎么注入。
    不在类里面定义sessionFactory,则不能定义getHibernateTemplate()方法,没有这个方法,后面的.find()以及.save()方法从哪里来?
    继承HibernateDaoSupport啊,继承了就有getHibernateTemplate()
      

  10.   

    不在Spring的配置文件里面配sessionFactory也能注入?
    兄弟你没有正眼看我的回复啊。
    你没明白意思,不在类里面定义,配置文件里肯定要有,不然怎么注入。
    不在类里面定义sessionFactory,则不能定义getHibernateTemplate()方法,没有这个方法,后面的.find()以及.save()方法从哪里来?
    继承HibernateDaoSupport啊,继承了就有getHibernateTemplate()
    所以说你没有正眼看我的文字,我明明是在上面写了两种使用getHibernateTemplate()的方式,一种是不继承,一种是继承,要不然我还会多此一举在这里贴代码问哪种方式更好?
    我看你就是个纯想捞分的,根本不认真看别人的问题,草草两句话就想浑水摸鱼捞点分,你还是别回我了,免得浪费大家的时间。我会在结贴的时候分你一部分点数的,毕竟你的行为还是属于帮助他人,没有功劳也有苦劳。
      

  11.   

    你的dao层再抽象出一层公共的BaseDaoBaseDao:
    protected HibernateTemplate getHibernateTemplate(){}不就可以了吗?而且你的UserDao和别的Dao都存在了重复代码,注入SessionFactory 和 getHibernateTemplate至于你说的查询list类型转换的问题,hibernate已经提供解决了:
    session.createQuery(hql).addEntity();  addEntity会转换类型的
      

  12.   

    1、你文字问题描述是po和vo 的问题。
    2、使用hibernateTemplate,要么在配置文件中配置,并注入sessionfactory;要么直接new,并在getHibernateTemplate方法中用有sessionfactory参数的构造函数赋值。至于为什么,自己理解注入的概念。
      

  13.   

    楼主你在动态给hibernateTemplate赋值呀,注入就好了呀