spring集成hibernate中使用纯注解注入sesstionFactory实例问题

在Spring与Hibernate集成过程中,遇到DAO层注入SessionFactory时出现错误:'sessionFactory' or 'hibernateTemplate' is required。尽管已进行注解注入,但问题依旧存在。经过一系列排查,发现是由于在Service层错误地继承了DAO层,而DAO层继承自Hibernate的HibernateDaoSupport,导致启动时需注入sessionFactory。解决方法是避免在Service层继承DAO层,保持正确依赖关系。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述:在spring和hibernate集成时,需要在dao实现层中注入sessionFactory,但是启动报错:Caused by: java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required。明明已经注入了,但是却还报这个错。而且之前的都是使用注解注入,都没问题。排查了几个来回,还是报错,最后都怀疑人生了。

注入如下:

    @Resource
    public void setSessionFacotry(SessionFactory sessionFactory) {
        super.setSessionFactory(sessionFactory);
    }

排查过程:几经周折,最终先理了一遍spring对bean的管理流程,注解方式和xml方式思路大体一样,我使用的是注解,所以简单写一下注解方式:1.先在spring的配置文件中启动注解扫描,且配置需要扫描的包,多个包中间用逗号隔开。2.service层实现类上贴上spring注解(可用@Component,@Service),并且写上实例名,用接口名首字母些小。3.dao层实现类上贴上注解(可用@Component,@Repository),并且写上实例名,用接口名首字母些小。4.dao实现类里注入sessionFactory。(dao实现继承了hibernate的hibernateDaoSupport类)

确认了以上流程没问题后,又仔仔细细地分析了一遍报错信息。找到感觉最有价值的错误信息如下:

[ERROR] [2019-10-16 10:24:01.067] [RMI TCP Connection(2)-127.0.0.1] [](ContextLoader.java:331) Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'ocxxxxxxService' defined in URL [jar:file:/D:/Develop/Tomcats/idea_tomcat/apache-tomcat-7.0.78/webapps/CommonXXX/WEB-INF/lib/CommonService-2.0.jar!/com/xx/xxx/service/impl/OcxxxxxxServiceImpl.class]: Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1554) ~[spring-beans-4.0.7.RELEASE.jar:4.0.7.RELEASE]
	at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:539) 

最终定位在service层上出了问题。马上回去查看service层代码,发现如下:

最终报错原因:居然在service层继承了dao层,而此dao继承了hibernateDaoSupport,所以在启动时,需要注入sessionFactory。

总结:头脑不清醒时,禁止敲代码!不然就会犯非常低级的错误!!!

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值