2 ycn5202005 ycn5202005 于 2016.03.22 17:34 提问

spring 配置 hibernate事务 100C

本人的目的是想解决一个Dao更新(this.getHibernateTemplate().update(product);)的时候抛出的一个事务异常:Turn your Session into FlushMode.COMMIT/AUTO or remove 'readOnly' marker from transaction definition.

1、applicationContext.xml(配置文件):

<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

<context:annotation-config/>

<!-- 配置 IOC容器 自动扫描的包 -->
<context:component-scan base-package="com.bj969.dao"/>

<!-- 导入资源文件 -->
<context:property-placeholder location="classpath:db.properties"/>

<!-- 配置C3P0数据源 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
    <property name="user" value="${jdbc.user}"/>
    <property name="password" value="${jdbc.password}"/>
    <property name="jdbcUrl" value="${jdbc.jdbcUrl}"/>
    <property name="driverClass" value="${jdbc.driverClass}"/>

    <property name="initialPoolSize" value="${jdbc.initPoolSize}"/>
    <property name="maxPoolSize" value="${jdbc.maxPoolSize}"/>
</bean>

<!-- 配置 具名参数 
<bean id="namedParameterJdbcTemplate" class="org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate">
    <constructor-arg ref="dataSource"></constructor-arg>
</bean>
-->
<!-- 配置 SessionFactory 的实例 -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
    <!-- 配置数据源 -->
    <property name="dataSource" ref="dataSource"/>
    <!-- 配置 Hibernate 配置文件的位置及名称 -->
    <property name="configLocation" value="classpath:hibernate.cfg.xml"/>
    <!-- 配置 Hibernate 映射文件的位置及名称 -->
    <property name="mappingLocations" value="classpath:com/bj969/hibernate/entities/*.hbm.xml"/>     
</bean>

<!-- 配置事务容器 -->
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>
<!-- 支持  @Transactional 标记 -->
<tx:annotation-driven transaction-manager="transactionManager"/>

2、Dao文件部分代码:

@Transactional
@Service
public class ProductDao extends HibernateDaoSupport {

@Resource(name="sessionFactory")
public void setMySessionFactory(SessionFactory sessionFactory){
    super.setSessionFactory(sessionFactory);
}   

public void save(Product product) {
    this.getHibernateTemplate().save(product);
}

public void delete(Product product) {
    this.delete(product);
}

@Transactional(readOnly=false)
public void update(Product product) {
    this.getHibernateTemplate().update(product);
}

问题: 一加上程序还未运行就提示错误。
图片说明

高手帮忙看看我的事务配置文件有没有问题,我采用的是全注解方式,但 <tx:annotation-driven 一加到配置文件里还未运行就有错误。

5个回答

devmiao
devmiao   Ds   Rxr 2016.03.22 18:02
liyangax
liyangax   2016.03.22 19:05

未引入spring相关的DTD文件

ycn5202005
ycn5202005   2016.03.23 09:51

这样引入的应该是正确的吧?

<?xml version="1.0" encoding="UTF-8"?>
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-4.2.xsd
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-4.2.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.2.xsd">

    ![图片说明](https://img-ask.csdn.net/upload/201603/23/1458697843_113659.png)
ganhaiqiang420
ganhaiqiang420   2016.03.23 16:31

配置文件配的不对,事物根本没法工作

nijiayy
nijiayy   2016.03.26 15:43

你的hibernate用的版本是多少啊?我之前就是用的5以上的版本,搭建ssh框架的时候,就因为版本问题而换了两次hibernate的版本,后来使用的是
hibernate4.1.7 Final

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!
其他相关推荐
spring mvc + hibernate 事务管理 + mysql
一:配置事务:datasource.xml<!-- 配置Hibernate事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" re
Spring管理 hibernate 事务配置的五种方式
Spring配置文件中关于事务配置总是由三个组成部分,DataSource、TransactionManager和代理机制这三部分,无论是那种配置方法,一般变化的只是代理机制这块!   首先我创建了两个类,一个接口一个实现: Java代码   package com.dao;   public interface UserDao {       publ
Spring整合Hibernate 声明式的事务管理
Spring大战Hibernate之声明式的事务管理 Spring配置文件: 添加事务管理类的bean: 该类由Spring提供,如果是hibernate4那就用"org.springframework.orm.hibernate4.HibernateTransactionManager"(Spring2不支持hibernate4)。 把sess
Spring整合Hibernate管理事务(xml配置方式)
之前是刚开始使用Spring的事务管理,采用比较简单方便的注解方式进行事务处理,而注解方式进行事务处理需要在每一个要实现事务的类上添加@Transactional注解,在比较小的项目中可以这样来用。但是在大型项目中,注解方式管理事务不够清晰,无法判断哪里开启了事务,必须一一查看才能知道,所以说采用xml配置事务可以比较清晰的标注到底哪个业务的哪个方法开启了事务,开启的事务的属性是什么。 配置方式
spring+springMVC+hibernate事务配置
最近开始着手开发一个项目管理系统,练习自己的开发技能。项目框架选择用的比较多的SSH框架,搭建过程中出现了一个事务不生效的问题,解决这个问题花了大半天时间,在此记录一下。 首先整理一下spring事务管理的思路,记得刚学时总是有人讲声明式的事务管理,声明式的事务管理听上去就一副屌屌的样子,其实也无非就是spring利用AOP来在方法的调用前后加上对事务的操作。这种操作由Spring进行了封装,我们只
spring,springmvc,hibernate整合事务不起作用
刚学习完这三大框架,跟着别人的博客整合一下,就测试一下事务是否起作用,用的1/0来测试,用的@Transactional注解在service层,发现事务始终不起作用,也在网上查了一些资料,发现spring,springmvc配置文件中扫描包冲突了,因为我的是在web.xml中先加载spring的配置文件,然后加载springmvc的配置文件(两个都是扫描全部的包),看别人的博客说后者的扫描覆盖了前
spring-hibernate整合 事务不起作用
当spring和hibernate 整合后,事务不起作用 解决办法:通过Spring的SessionFactory的getCurrentSession的方法创建Session 一、首先说一下hibernate中创建用来连接数据库的Session,有两种方式。 1.通过Spring的SessionFactory的getCurrentSession的方法创建Session 。 2.通过
spring、hibernate事务管理的区别及整合方式
原文地址:点击打开链接 在谈Spring事务管理之前我们想一下在我们不用Spring的时候,在Hibernate中我们是怎么进行数据操作的。在Hibernate中我们每次进行一个操作的的时候我们都是要先开启事务,然后进行数据操作,然后提交事务,关闭事务,我们这样做的原因是因为Hibernate默认的事务自动提交是false,他是需要我们人为的手动提交事务,假如你不想每次都手动提交事务的话,你
spring整合hibernate事务管理的四种方式,以及事务的传播行为和隔离级别介绍
转自:http://blog.csdn.net/jianxin1009/article/details/9202907    为了保证数据的一致性,在编程的时候往往需要引入事务这个概念。事务有4个特性:原子性、一致性、隔离性、持久性。          事务的种类有两种:编程式事务和声明式事务。编程式事务就是将事务处理放在程序中,而声明式事务则是通过配置文件或者注解进行操作
Spring Hibernate 开启事务
仅仅记录一下配置文件 <beans xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://www.springframework.org/schema/beans" xmlns:p="http://www.springframework.org/schema/p" xmlns:tx="http://www.sp