日期:2014-05-17  浏览次数:20887 次

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,
------解决方案--------------------
把你类上面的 事物定义去掉 只保留 方法上的 再试试