在项目中集成hibernate遇到的问题(4)
来源:互联网 发布:r语言编程艺术下载。 编辑:程序博客网 时间:2024/05/17 23:38
在项目中集成hibernate时,运行Project后提示:
Invocation of init method failed; nested exception is java.lang.IllegalArgumentException: 'sessionFactory' or 'hibernateTemplate' is required
在applicationContext.xml配置如下:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
- <importresource="applicatonDBContext.xml"/>
- <bean id="userDao"class="com.hnyd.demo.hibernate.jdbc.dao.impl.UserDao">
- </bean>
- </beans>
applicatonDBContext.xml配置如下:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <beans xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xmlns:jee="http://www.springframework.org/schema/jee"
- xmlns:tx="http://www.springframework.org/schema/tx"xmlns:jaxws="http://cxf.apache.org/jaxws"
- xmlns:context="http://www.springframework.org/schema/context"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"
- default-lazy-init="false">
- <beanid="SystemDataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
- <propertyname="driverClass" value="${db.driver}"/>
- <propertyname="jdbcUrl" value="${db.url}"/>
- <propertyname="user" value="${db.username}"/>
- <propertyname="password" value="${db.password}"/>
- <propertyname="minPoolSize" value="10"/>
- <propertyname="maxPoolSize" value="20"/>
- <propertyname="initialPoolSize" value="2"/>
- <propertyname="maxIdleTime" value="1800"/>
- <propertyname="acquireIncrement" value="1"/>
- <propertyname="maxStatements" value="0"/>
- <propertyname="idleConnectionTestPeriod" value="60"/>
- <propertyname="acquireRetryAttempts" value="30"/>
- <propertyname="breakAfterAcquireFailure" value="false"/>
- <propertyname="testConnectionOnCheckout" value="false"/>
- <propertyname="testConnectionOnCheckin" value="true"/>
- </bean>
- <bean id='ConfigurationBean' class="com.hnyd.demo.hibernate.util.Configuration">
- <propertyname="location" value="file:config/config.properties"/>
- </bean>
- <!-- 创建一个sessionFactory工厂,用于注入hibernate -->
- <beanid="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
- <propertyname="dataSource" ref="SystemDataSource"></property>
- <propertyname="hibernateProperties">
- <props>
- <propkey="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
- <propkey="hibernate.show_sql">true</prop>
- <!-- <prop key="hibernate.hbm2ddl.auto">update</prop> -->
- <propkey="hibernate.jdbc.batch_size">20</prop>
- </props>
- </property>
- <propertyname="mappingResources">
- <list>
- <value>hbm/User.hbm.xml</value>
- </list>
- </property>
- </bean>
- <!-- 创建一个hibernate模板 -->
- <beanid="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
- <propertyname="sessionFactory">
- <refbean="sessionFactory"/>
- </property>
- </bean>
- <beanid="jdbcTemplate" class="org.springframework.jdbc.core.JdbcTemplate">
- <propertyname="dataSource" ref="SystemDataSource"/>
- </bean>
- <bean id="sjdbcTemplate" class="org.springframework.jdbc.core.simple.SimpleJdbcTemplate">
- <constructor-arg>
- <refbean="SystemDataSource"/>
- </constructor-arg>
- </bean>
- </beans>
UserDao.java
- public class UserDaoextends HibernateDaoSupport implements IUserDao {
- @Override
- public void add(User user) {
- this.getHibernateTemplate().save(user);
- }
- @Override
- public void delete(int uid) {
- User user=new User();
- user.setId(uid);
- this.getHibernateTemplate().delete(user);
- }
- @Override
- public User findById(int uid) {
- return (User)this.getHibernateTemplate().get(User.class,uid);
- }
- }
查找 原因发现HibernateDaoSupport缺少注入SessionFactory,HibernateDaoSupport提供了基于AOP事务的自动处理,程序员完全可以不用理会事务的开始与提交。在JDBC中一个Connection对象使用一个事务,那么在Hibernate中一个事务肯定要关联一个SessionFactory了,然而这个SessionFactory却没有在DAO中体现。其实主要的原因是HibernateDaoSupport类已经默默地做了封装的工作,它用一个setSessionFactory方法将SessionFactory进行注入,所以继承自HibernateDaoSupport类的DAO都会具有SessionFactory的属性,从而可以通过SessionFactory创建Session实例操作数据库。
在继承HibrnateDaoSupport的DAO实现里,Hibernate Session的管理完全不需要Hibernate代码打开,而由Spring来管理。Spring会根据实际的操作,采用“每次事务打开一次session”的策略,自动提高数据库访问的性能。
因此需要定义一个父类,父类要有一个hibernateTemplate属性,并且注入引用,配置如下:
- <!-- 创建一个dao注入的模板 -->
- <bean id="daoTemplate"abstract="true">
- <propertyname="hibernateTemplate">
- <refbean="hibernateTemplate"/>
- </property>
- </bean>
所有使用hibernate的dao都配置为该类的子类,于是applicationContext.xml配置如下:
- <?xmlversion="1.0"encoding="UTF-8"?>
- <beans
- xmlns="http://www.springframework.org/schema/beans"
- xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
- <importresource="applicatonDBContext.xml"/>
- <!-- 创建一个dao注入的模板 -->
- <bean id="daoTemplate"abstract="true">
- <propertyname="hibernateTemplate">
- <refbean="hibernateTemplate"/>
- </property>
- </bean>
- <bean id="userDao"class="com.hnyd.demo.hibernate.jdbc.dao.impl.UserDao"parent="daoTemplate">
- </bean>
- </beans>
经过上面的配置后,就可以正常使用了
- 在项目中集成hibernate遇到的问题(4)
- 在项目中集成hibernate遇到的问题(4)
- 在项目中集成hibernate遇到的问题(1)
- 在项目中集成hibernate遇到的问题(2)
- 在项目中集成hibernate遇到的问题(3)
- 在项目中集成hibernate遇到的问题(1)
- 在项目中集成hibernate遇到的问题(2)
- 在项目中集成hibernate遇到的问题(3)
- Mondrian集成WEB项目中所遇到的问题
- 在项目中经常遇到的问题
- Spring+Hibernate+Struts项目中Tomcat常遇到的问题
- Spring+Hibernate+Struts项目中Tomcat常遇到的问题
- Spring+Hibernate+Struts项目中Tomcat常遇到的问题
- 在hibernate中遇到的问题的记录
- mysql/hibernate在left join中遇到的问题
- 关于在myeclipse中使用Hibernate遇到的问题
- Hibernate在SQL语句中遇到的三个问题
- hibernate中遇到的问题
- SQLBulkCopy使用2 .
- T-Sql 函数,替换字段内的 html 标签
- Spring with AOP
- 游戏开发常用算法1
- 再谈协方差矩阵之主成分分析
- 在项目中集成hibernate遇到的问题(4)
- 计算机图像图形学相关好书推荐[转]
- linux下telnet服务端配置
- lvm 的管理和使用
- NDK安装环境测试方法(适用于NDK-R7之前的)
- cygwin的工作机制
- 游戏开发常用算法2
- Hibernate学习笔记
- 如何选择集合