当前位置: 代码迷 >> Java Web开发 >> Spring mvc 整合hibernate 中的事务有关问题
  详细解决方案

Spring mvc 整合hibernate 中的事务有关问题

热度:6489   发布时间:2013-02-25 21:13:32.0
Spring mvc 整合hibernate 中的事务问题
spring 3+hibernate 3 整合

spring 配置文件

XML code
<bean id="txManager"        class="org.springframework.orm.hibernate3.HibernateTransactionManager">        <property name="sessionFactory" ref="sessionFactory" /></bean><tx:annotation-driven transaction-manager="txManager" />

dao基类

Java code
import javax.annotation.Resource;import org.hibernate.SessionFactory;import org.springframework.stereotype.Repository;import org.springframework.transaction.annotation.Propagation;import org.springframework.transaction.annotation.Transactional;@Repository@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)public class BaseDao<T, PK extends Serializable> implements        BaseDaoService<T, PK> {    @Resource    SessionFactory factory;    /**    *保存对象    */    @Override    @Transactional(readOnly = false, propagation = Propagation.SUPPORTS)    public void save(T entity) {        factory.getCurrentSession().persist(entity);//persist方法不能插入数据    }}

service层
Java code
@Service@Transactional(readOnly = true, propagation = Propagation.SUPPORTS)public class MyService  {    @Resource    MyDAO myDAO;//继承自dao基类,此处是dao的接口    @Override    @Transactional(readOnly = false, propagation = Propagation.SUPPORTS)    public void save(User entity) {        myDAO.save(entity);    }}


dao层代码就不写了,只是继承了基类dao

控制层
Java code
@Controller@RequestMapping(value = "/user")public class UserAction {    @Resource    UserService myService;//service接口            @RequestMapping(value = "/add")    public String user_add(User user) {                myService.save(user);                return "list";    }}

页面提交后数据无法insert 进数据库,
Java code
factory.getCurrentSession().persist(entity);// 把persit更改为factory.getCurrentSession().save(entity);
插入正常。查了下说跟事务有关。不知道哪里出错了。怎么修正才能使persist插入正常

------解决方案--------------------------------------------------------
说的好啊
------解决方案--------------------------------------------------------
事务没有提交....你可以在hibernate.cfg.xml中添加一个节点:
<property name="connection.autocommit">true</property>
------解决方案--------------------------------------------------------
试一试去掉@Transactional(readOnly = false,里面的readOnly = false,
------解决方案--------------------------------------------------------
把你类上面的 事物定义去掉 只保留 方法上的 再试试
  相关解决方案