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"> '+g_read[i][1]+'.jpg'; _rh2+=''; } } _rh1+=''; _rh2+='
portraitn.jpg '; }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=" "+portraitId+".jpg
"+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>
  
验证码:请输入下图中的四位验证码,字母不区分大小写。
<script language="JavaScript" type="text/javascript"> var imgsrc="https://i-blog.csdnimg.cn/blog_migrate/fbe3c87c3ec7d446b6313e763fde1463.png"; document.write(""+imgsrc+""); 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>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值