java.lang.IllegalArgumentException: sessionFactory or hibernateTemplate is required

本文记录了在使用SSH框架时遇到的关于SessionFactory配置错误的问题及解决方法。通过在配置文件中正确设置SessionFactory属性,解决了启动TOMCAT服务器时报错的情况。


昨天在做一个SSH的例子时.启动TOMCAT服务器时就老是报错.
.........
java.lang.IllegalArgumentException: sessionFactory or hibernateTemplate is required

根据提示在配置文件中为这个类添加一个property属性
<property name="sessionFactory">
<ref bean="sessionFactory" />
</property>
就不会报错.但是其它的Service类并不需要这么做,让我感觉很奇怪.最终发现原来是我让CataogService  extends HibernateDaoSupport .改正后运行正常,goood
牢记....

145545.html

KE 2007-09-16 16:45 发表评论
你遇到的异常: ``` org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'payAttament' defined in class path resource [...]: Initialization of bean failed; nested exception is java.lang.IllegalArgumentException: sessionFactory or hibernateTemplate is required ``` 这个错误信息说明你的 `PaySubmitServiceImpl` 类继承了 `HibernateDaoSupport`(即 `AbstractService` 很可能是继承自 `HibernateDaoSupport`),而你没有为它配置 `sessionFactory` 或 `hibernateTemplate`。 --- ## 🧨 错误原因分析: 你当前的类结构是: ```java public class PaySubmitServiceImpl extends AbstractService implements IPaySubmitService { ``` 而 `AbstractService` 很可能继承自 `HibernateDaoSupport`,这个类是 Spring 提供的用于简化 Hibernate 数据访问的基类。它要求你必须注入 `sessionFactory` 或 `hibernateTemplate`,否则在初始化 bean 时就会抛出上面的异常。 --- ## ✅ 解决方案 ### ✅ 方案一:为 `PaySubmitServiceImpl` 注入 `sessionFactory` 如果你确实需要使用 Hibernate 的功能(比如数据库操作),你需要在 Spring 配置中为 `PaySubmitServiceImpl` 注入 `sessionFactory`。 #### 修改配置文件: ```xml <bean id="payAttament" class="com.smec.apps.crm.service.impl.PaySubmitServiceImpl"> <property name="payAttamentGroup"> <map> <entry key="KEY" value="123456"/> <entry key="URL" value="http://10.190.90.49:1234/openapi/account/openapi/v1/agency-detail/query-pdf"/> </map> </property> <!-- 注入 sessionFactory --> <property name="sessionFactory" ref="sessionFactory"/> </bean> ``` > 注意:这里的 `sessionFactory` 是你已经在 Spring 配置中定义好的 Hibernate `SessionFactory` bean。 --- ### ✅ 方案二:不继承 `HibernateDaoSupport` 如果你的 `PaySubmitServiceImpl` 并不需要访问数据库,只是调用外部接口(如你之前的 `getBankAttachment` 方法),那么你就不应该让它继承 `HibernateDaoSupport`(或其子类 `AbstractService`)。 #### 修改类定义: ```java public class PaySubmitServiceImpl implements IPaySubmitService { private static final Logger log = Logger.getLogger(PaySubmitServiceImpl.class); private Map<String, String> payAttamentGroup; // 用于 Spring 注入 public void setPayAttamentGroup(Map<String, String> payAttamentGroup) { this.payAttamentGroup = payAttamentGroup; } // getBankAttachment 方法保持不变 } ``` > 删除了 `extends AbstractService`,避免继承 `HibernateDaoSupport`,从而不需要注入 `sessionFactory`。 --- ## ✅ 总结对比 | 问题 | 原因 | 解决方法 | |------|------|----------| | `sessionFactory or hibernateTemplate is required` | 类继承自 `HibernateDaoSupport`,但未注入 `sessionFactory` | 1. 注入 `sessionFactory`<br>2. 或者不继承 `HibernateDaoSupport` | --- ## ✅ 最佳实践建议 - 如果你只是调用外部接口(如 HTTP 请求),**不要继承 `HibernateDaoSupport`**。 - 如果你需要使用 Hibernate 操作数据库,则必须注入 `sessionFactory`。 - 配置 `Map<String, String>` 类型属性时,直接使用 `<entry key="KEY" value="123456"/>` 更简洁安全。 --- ##
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值