spring管理hibernate的问题
在spring没有配置事务管理的情况下,只配置了sessionFactory
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" >
<property name="configLocation">
<value>WEB-INF/hibernate.cfg.xml</value>
</property>
</bean>
<bean id="studao" class="dao.StudentDao" singleton="false">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
我的这个学生dao这么写事务能提交吗
public class StudentDao extends HibernateDaoSupport implements IStudentDao {
//添加学生
public void inputStu(Student student){
HibernateTemplate ht=this.getHibernateTemplate();
try {
ht.save(student);
} catch (Exception e) {
e.printStackTrace();}
}
还有 HibernateTemplate 和 HibernateDaoSupport
有什么好处和作用~~
[解决办法]
如果你的这个dao不涉及service的话,只在本身的dao.impl中做测试
<bean id="studao" class="dao.StudentDao" singleton="false">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
是没问题的,因为spring内在的HibernateTemplate就含有了自动提交和打开连接数据库的能力,比如session的打开关闭等等
即这就不用自己进行提交和管理session了,应该说更方便了
[解决办法]
你吧DateSource也封装成Bean。让SessionFactory依赖DateSource。不要有hibernate.cfg.xml 容易出错。
[解决办法]
自己的dao有继承HibernateDaoSupport 的话
事务会提交,但是也建议你在spring配置文件中配置事务管理器
[解决办法]
顶楼上那些。。。。。。。。
[解决办法]
你的sessionFactory要依赖于dataSource
[解决办法]
这种情况下要么使用spring的声明事务,要么手动提交事务,否则的话是会出现问题。
使用hibernateTemplate 和 daoSupport 能让你不必去关心想一些session的问题,还有就是将一些操作集成化。
[解决办法]
必须先有datasSource
然后才有sessionFactory
[解决办法]
既然继承了HibernateDaoSupport,要配置事务的应该,或者你手动提交事务,这样的话,你还继承这个类干嘛呢?继承这个类,就是使用spring的声明式事务,帮你管理session的 关注!
[解决办法]
你继承了HibernateSupport并且实现了HibernateTemplate
然后掉用里面的save方法就已经提交了事物的,并且这个方法应该抛出的是运行时异常
另外说一点:实现这个接口有个缺点,就是它没有进行事物的回滚。
[解决办法]
如果在hibernate配置文件中添加了
<property name="connection.autocommit">true</property>
是可以提交的
[解决办法]
很明显是在hibernate配置文件中配置了属性
[解决办法]
hibernate.cfg.xml 应该贴出来
[解决办法]
楼主可以试着在 数据库 里插入语句看一下,(主键自动增长)看 插入语句的 主键id 是否为1,如果是2,则说明你运行save方法添加成功了 但是 回滚了 所以第1条save的数据又删掉了
[解决办法]
主键自动增长是不是搞错了。。换个看。。我碰到过这情况。。
[解决办法]
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE beans PUBLIC "-//SPRING/DTD BEAN/EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://localhost:3306/springdb</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>root</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean" destroy-method="close"> <property name="dataSource"> <ref bean="dataSource"/> </property> <property name="mappingResources"> <list> <value>com/livechance/User.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect"> org.hibernate.dialect.MySQLDialect </prop> <prop key="hibernate.show_sql"> true </prop> <prop key="hibernate.format_sql"> true </prop> </props> </property> </bean> <bean id="userDAO" class="com.livechance.UserDAO"> <property name="sessionFactory"> <ref bean="sessionFactory"/> </property> </bean>
[解决办法]
Session session = getHibernateTemplate().getSessionFactory().openSession(); Transaction tx = session.beginTransaction(); tx.commit(); session.close();
[解决办法]
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd"> <beans> <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close"> <property name="driverClassName"> <value>com.mysql.jdbc.Driver</value> </property> <property name="url"> <value>jdbc:mysql://192.168.22.155:3306/e-learning</value> </property> <property name="username"> <value>root</value> </property> <property name="password"> <value>000</value> </property> </bean> <bean id="sessionFactory" class="org.springframework.orm.hibernate3.LocalSessionFactoryBean"> <property name="dataSource"> <ref local="dataSource" /> </property> <property name="mappingResources"> <list> <value>com/hibernate/TUserinfo.hbm.xml</value> <value>com/hibernate/TFiletype.hbm.xml</value> <value>com/hibernate/TFileinfo.hbm.xml</value> <value>com/hibernate/TUserGroup.hbm.xml</value> <value>com/hibernate/TRight.hbm.xml</value> <value>com/hibernate/TUserlog.hbm.xml</value> <value>com/hibernate/TGroup.hbm.xml</value> </list> </property> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop> <prop key="hibernate.show_sql">true</prop> </props> </property> </bean> <bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="userDAO" class="com.daoimp.TUserinfoDAOImp"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="userDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="userDAO" /> </property> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED</prop> <prop key="is*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean id="filetypeDAO" class="com.daoimp.TFiletypeDAOImp"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="filetypeDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="filetypeDAO" /> </property> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED,readOnly</prop> <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean id="rightDAO" class="com.daoimp.TRightDAOImp"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="rightDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="rightDAO" /> </property> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED</prop> <prop key="is*">PROPAGATION_REQUIRED,readOnly</prop> </props> </property> </bean> <bean id="usergroupDAO" class="com.daoimp.TUserGroupDAOImp"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="usergroupDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="usergroupDAO" /> </property> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED</prop> <prop key="is*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean name="infoService" class="com.struts.service.InfoService" singleton="false"> <property name="userDAO"> <ref bean="userDAOProxy" /> </property> <property name="usergroupDAO"> <ref bean="usergroupDAOProxy" /> </property> <property name="groupDAO"> <ref bean="groupDAOProxy" /> </property> <property name="rightDAO"> <ref bean="rightDAOProxy" /> </property> <property name="filetypeDAO"> <ref bean="filetypeDAOProxy" /> </property> </bean> <bean name="fileTypeService" class="com.struts.service.FileTypeService" singleton="false"> <property name="filetypeDAO"> <ref bean="filetypeDAOProxy" /> </property> </bean> <bean name="rightService" class="com.struts.service.RightInfoService" singleton="false"> <property name="rightDAO"> <ref bean="rightDAOProxy" /> </property> </bean> <bean name="/login" class="com.struts.action.LoginAction" singleton="false"> <property name="infoService"> <ref bean="infoService" /> </property> <property name="fileTypeService"> <ref bean="fileTypeService" /> </property> <property name="rightService"> <ref bean="rightService" /> </property> </bean> <bean id="fileinfoDAO" class="com.daoimp.TFileinfoDAOImp"> <property name="sessionFactory"> <ref local="sessionFactory" /> </property> </bean> <bean id="fileinfoDAOProxy" class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean"> <property name="transactionManager"> <ref bean="transactionManager" /> </property> <property name="target"> <ref local="fileinfoDAO" /> </property> <property name="transactionAttributes"> <props> <prop key="insert*">PROPAGATION_REQUIRED</prop> <prop key="get*">PROPAGATION_REQUIRED</prop> <prop key="is*">PROPAGATION_REQUIRED</prop> </props> </property> </bean> <bean name="fileInfoService" class="com.struts.service.FileInfoService" singleton="false"> <property name="fileinfoDAO"> <ref bean="fileinfoDAOProxy" /> </property> </bean> <bean name="/show" class="com.struts.action.ShowFileNameAction" singleton="false"> <property name="fileInfoService"> <ref bean="fileInfoService" /> </property> </bean>