在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
有什么好处和作用~~
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
有什么好处和作用~~
解决方案 »
- 页面无法跳转
- 求教~~~String转换为byte类型十六进制数,在线等!!!!!!!!!!
- s2sh框架的搭建?
- 两个SSH布署到同一个tomcat6.0下有一个不能启动的问题
- eclipse为什么进断点会新弹开一个类?
- 恳请大家帮个忙:eclipse下如何跟踪struts源代码
- 怎么统计从数据库里取出的数据条数
- 百分求助:不安装Tomcat直接拷贝文件在客户的机器上,如何配置,才能使tomcat可以使用呢。
- CallBack 是什么意思?
- 请问EJB高手,EJB主要用在b/s方式还是c/s,还是两这都可?有用过jBoss的吗?有配置文档吗?一定给分!!
- 请教一个项目开发的具体问题
- WebService传递Object
<bean id="studao" class="dao.StudentDao" singleton="false">
<property name="sessionFactory">
<ref local="sessionFactory"/>
</property>
</bean>
是没问题的,因为spring内在的HibernateTemplate就含有了自动提交和打开连接数据库的能力,比如session的打开关闭等等
即这就不用自己进行提交和管理session了,应该说更方便了
什么叫不涉及service?我在struts的action里调用这个dao,可是事务没有提交
HibernateTemplate不是含有了自动提交和打开连接数据库的能力吗?
事务会提交,但是也建议你在spring配置文件中配置事务管理器
不把DateSource封装成Bean会出错吗·~~按道理继承HibernateDaoSupport
hibernatetemplate 能管理事务, 可是我现在事务就是不能提交,可以在缓存里查到更新的数据库信息
可是数据库里的数据没有更新。
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();}
}
然后才有sessionFactory
就是说继承了HibernateDaoSupport ,事务应该会自动提交了?
然后掉用里面的save方法就已经提交了事物的,并且这个方法应该抛出的是运行时异常
另外说一点:实现这个接口有个缺点,就是它没有进行事物的回滚。
<property name="connection.autocommit">true</property>
是可以提交的
总之事务没有提交 按道理
继承了HibernateSupport并且实现了HibernateTemplate
应该可以吧~~
<?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>
这个配置可以提交
可能是你没有配置datasource的问题
HibernateDAOSupport
是对session的封装
最好还是配上事物管理器
Transaction tx = session.beginTransaction();
tx.commit();
session.close();给你个解决办法
这说明Hibernate确实没有管理事务的能力只有打开和关闭session的能力
HibernateTemplate确实没有设置session的事务属性,因为在spring的模型中,事务本来就不是HibernateTemplate来管理的。HibernateTemplate的作用是保证session能够正确的打开和关闭,避免手工管理session带来的问题,同时让session自动的参与事务,转换检查异常。spring中的事务应该使用TransactionTemplate,或者是是更加好的,类似EJB的声明式事务。如果配置了声明式事务,HibernateTemplate就可以保证让session自动参与事务,这一点从HibernateTemplate的源代码中可以看出来。手工管理的session在多线程操作,声明式事务的各种场景下,会造成代码的混乱。不推荐手工管理session,也不推荐手工管理事务。最佳的实践,是HibernateTemplate + 声明式事务。楼主没有使用任何spring的事务机制,所以HibernateTemplate确实就是 无事务,这就是autoCommit==true的原因。楼主的例子在实践中极为危险。
<!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>