Spring整合Hibernate时遇到BeanCreationException

 

 初学Spring,在Spring中整合Hibernate时,遇到如下异常:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'BookDAO' defined in class path resource [applicationContext.xml]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: sessionFactory or hibernateTemplate is required

我在程序中定义了一个BookDAO类,继承了HibernateDaoSupport,以利用HibernateTemplate来进行对数据库数据的增删修查的操作。

 

public   class  BookDAO  extends  HibernateDaoSupport  {
    
    
public void addBook(Book book){
        getHibernateTemplate().save(book);
        getHibernateTemplate().flush();
    }

    
    
public void delBook(Book book){
        getHibernateTemplate().delete(book);
        getHibernateTemplate().flush();
    }

    
    
public void update(Book book){
        getHibernateTemplate().update(book);
        getHibernateTemplate().flush();
    }

    
    
public Book getBook(long oid){
        
return (Book)getHibernateTemplate().get(Book.class, oid);
        
    }

    
}

另外,我定义了一个类BookSrv,其依赖于BookDAO,并利用Setter Injection的依赖注入方式,注入BookDAO的对象。

 

public   class  BookSrv  {
    
    
private BookDAO bdao=null;

    
public void setBdao(BookDAO bdao) {
        
this.bdao = bdao;
    }

    
    
public void add(Book book){
        bdao.addBook(book);
    }

    
    
public void del(Book book){
        bdao.delBook(book);
    }

    
    
public void update(Book book){
        bdao.update(book);
    }

    
public Book get(long oid){
        
return bdao.getBook(oid);
    }

}

我原先的错误的配置文件如下(省略其他部分):

 

< bean  id ="BookDAO"  class ="dao.BookDAO" >
</ bean >
    
< bean  id ="BookSrv"  class ="srv.BookSrv" >
           
< property  name ="bdao"  ref ="BookDAO" ></ property >
</ bean >

 

想了很久,也找不出异常地原因。而且被那一句sessionFactory or hibernateTemplate is required所害,一直在dataSource、sessionFactory、hibernateTemplate的配置上苦苦地追寻着错误所在。

其实早该发现问题地所在:BeanCreationException: Error creating bean with name 'BookDAO' ……

因为BookDAO继承了HibernateDaoSupport,并利用HibernateDaoSupport的getHibernateTemplate()得到一个HibernateTemplate的对象,然后再调用这个对象的save()、flush()等方法。所以,BookDAO依赖于HibernateTemplate。

于是,在配置文件中加上BookDAO对HibernateTemplate的依赖即可解决问题。

正确的配置文件为:

 

     < bean  id ="BookDAO"  class ="dao.BookDAO" >
        
< property  name ="hibernateTemplate"  ref ="hibernateTemplate" ></ property >
    
</ bean >
    
    
< bean  id ="BookSrv"  class ="srv.BookSrv" >
        
< property  name ="bdao"  ref ="BookDAO" ></ property >
    
</ bean >

 


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值