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

spring传播属性设置问题
我是在校大学城,正在学习ssh2,使用spring与hibernate集成出现了问题。我想设置spring的事务传播属性,当我将受管事务类方法的propagation设置为NOT_SUPPORTED,发现不起作用。
xml配置文件:
<context:property-placeholder location="classpath:dataSource.properties" />

<!-- 配置数据源 -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">

<property name="driverClassName" value="${driverClassName}"></property>
<property name="url" value="${url}" />
<property name="username" value="${username}"></property>
<property name="password" value="${password}"></property>
<property name="maxActive" value="${maxActive}"></property>
<property name="maxIdle" value="${maxIdle}"></property>
<property name="minIdle" value="${minIdle}"></property>
<property name="initialSize" value="${initialSize}"></property>

</bean>

<!-- 使用spring提供的类配置hibernate的SessionFactory -->
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">

<property name="dataSource" ref="dataSource"></property>

<property name="mappingResources">
<list>
<value>com/zhangle/spring/bean/Person.hbm.xml</value>
</list>
</property>

<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.Oracle10gDialect
hibernate.hbm2ddl.auto=update
hibernate.show_sql=true
hibernate.format_sql=true
</value>
</property>

</bean>

<!-- 配置spring事务管理器 -->
<bean id="transactionManager"
class="org.springframework.orm.hibernate3.HibernateTransactionManager">

<property name="sessionFactory" ref="sessionFactory"></property>

</bean>

<!-- 将配置好的事务管理器交由spring管理 -->
<tx:annotation-driven transaction-manager="transactionManager" />
<!-- 打开注解解析器 -->
<context:annotation-config />

<!-- 将service类交由spring管理 -->
<bean id="personService" class="com.zhangle.spring.service.impl.PersonService"></bean>

service类代码:
@Transactional
public class PersonService implements Service
{
private SessionFactory sessionFactory;

@Transactional(propagation=Propagation.NOT_SUPPORTED)
public void delete(Person person)
{
this.sessionFactory.getCurrentSession().delete(person);
}

public void update(Person person)
{
this.delete(person);
this.sessionFactory.getCurrentSession().update(person);
}


我的理解是调用update方法,执行结果应该是先删除了指定的Person对应的记录,然后执行session.update()会出现异常,当前事务进行回滚,但不会影响到this.delete(person)的执行结果吧,因为我设置了其传播属性为NOT_SUPPORTED。即数据库中的记录还是会删除,但结果是没有删除。求高手指教,由于是初学者,请写的详细点,谢谢

------解决方案--------------------
Propagation.NOT_SUPPORTED
表示事务是不被支持的 。
------解决方案--------------------
session 也可能不是自动提交的 。 
可以在sessionFactorybean中再加入属性 试试
hibernate.connection.autocommit true