Spring整合Hibernate时遇到BeanCreationException

<script language="JavaScript" type="text/javascript"> <!----> </script>
<nobr> <script type="text/javascript"> var myref = encodeURI("http://hi.baidu.com/ssuhvs/blog/item/0d0600d122869dd0562c8431%2Ehtml");</script> 百度首页 | 百度空间 <script language="JavaScript" type="text/javascript"> document.write(" | 登录"); </script> | 登录 </nobr>
<!---->
 
查看文章
   
Spring整合Hibernate时遇到BeanCreationException
2007年10月21日 18:09

初学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 >


 
<script language="javascript" type="text/javascript"> /*<!---->'); if(pre[0]){ document.write('上一篇: ' + pre[1] + '    '); } if(post[0]){ document.write('下一篇: ' + post[1] + ''); } document.write('
'); document.write('
 
'); } /*]]>*/ </script>
 
最近读者:
<script type="text/javascript"> var g_spAnnony=true; var g_read=[ {} ]; g_read.length=g_read.length-1; var _rh1=""; var _rh2=""; function wrreader(){ _rh1 += ''; _rh2+=''; if(g_spAnnony){ _rh1+=''; _rh2+=''; if(g_read.length>0){ _rh1+='"; _rh2+='' } if(g_read.length==0){ if(!g_spAnnony){ _rh1+=''; _rh2+=''; } }else{ for(i=0,len=g_read.length;i<len;i++){ _rh1+="&lt;td align=&quot;center&quot; valign=&quot;bottom&quot; width=&quot;10%&quot; class=&quot;user&quot;&gt;&lt;a href=&quot;/" +g_read[i][0]+'"="" target="_blank"> '; _rh2+=''; } } _rh1+=''; _rh2+='
  '; }else{ _rh1+=' '; } _rh1+="登录后,您就出现在这里。   最近还没有登录用户看过这篇文章……   '+g_read[i][2]+'
'; document.write(_rh1+_rh2); } wrreader(); </script>
登录后,您就出现在这里。  
     
 
<script language="JavaScript" type="text/javascript"> allkey=allkey+"dd96094f0e02fd36aec3ab81_0d0600d122869dd0562c8431_"; </script>
网友评论:
<script type="text/javascript"> function writecmt(type,id,cmtname,cmturl,portraitId){ var html1=""; if(type==1){ html1="
"+cmtname+"
"; }else{ if(cmtname=="" || cmtname=="匿名网友"){ if(cmturl==""){ html1=" 匿名网友"; }else{ html1=" "+cmtname+""; } }else{ if(cmturl==""){ html1="
网友: "+cmtname+"
"; }else{ html1="
网友: "+cmtname+"
"; } } } document.write(html1); } </script>
<script language="JavaScript" type="text/javascript"> document.write(""); </script>
发表评论:
<script type="text/javascript"> G("spBlogCmtor").value=""; G("spBlogCmtURL").value=""; </script>
姓 名: <script type="text/javascript"> document.write("    注册"); document.write(" | 登录"); </script>    注册 | 登录
*姓名最长为50字节
   
网址或邮箱: (选填)
   
内 容: <script type="text/javascript"> G("spBlogCmtor").value=G("spBlogCmtor").defaultValue; G("spBlogCmtText").value=""; </script> </td></tr>
   
验证码: 请输入下图中的四位验证码,字母不区分大小写。
<script language="JavaScript" type="text/javascript"> var imgsrc="http://post.baidu.com/cgi-bin/genimg?850AC8D18BE37F2409C2A8C6813E69C7ABA4C95BA4993ADD7AC794AA319C315A929028431F2B7D1C2425C90A8EC8EFC152C716801788C05C32144690618F7CD3"; document.write(""); function newverifypic(){ document.getElementById("verifypic").src = imgsrc +"&t="+ Math.random(); } </script> 看不清?
 

     
<script language="javascript" type="text/javascript"> <!----> </script> <script src="http://hi.baidu.com/ssuhvs/brwstat?key1=1&amp;amp;key2=dd96094f0e02fd36aec3ab81_0d0600d122869dd0562c8431_" type="text/javascript"></script>
©2007 Baidu
<script type="text/javascript"> if(document.getElementById("m_blog")) { var imgarray = document.getElementById("m_blog").getElementsByTagName('img'); var imgw = document.getElementById("m_blog").offsetWidth; imgw =imgw-40; for(var i=0; i<imgarray.length; i++){="" if(imgarray[i].classname="=&quot;blogimg&quot;" &&="" imgarray[i].width="">=imgw) imgarray[i].width=imgw; } } </script>

你可能感兴趣的:(JavaScript,spring,bean,Hibernate,百度)