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 >

 


你可能感兴趣的:(hibernate,spring,bean,class,initialization,exception)