hiberante使用Spring声明式事物
配置数据源
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource">
<property name="driverClass" value="${jdbc.driverClassName}" />
<property name="jdbcUrl" value="${jdbc.url}" />
<property name="user" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>
配置sessionFactory
<bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="classpath:hibernate.cfg.xml"></property>
<property name="mappingLocations" value="classpath:com/link/*.hbm.xml"></property>
</bean>
配置事物管理器
<bean id="transactionManager" class="org.springframework.orm.hibernate5.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"></property>
</bean>
在xml中定义事物
<tx:advice id="txAdvice" transaction-manager="transactionManager">
<tx:attributes>
<tx:method name="execute" propagation="REQUIRED"
isolation="READ_COMMITTED" read-only="false"
timeout="-1"
/>
<tx:method name="*"/>
</tx:attributes>
</tx:advice>
<aop:config>
<aop:pointcut expression="execution(void com.link.Option.*())" id="pc"/>
<aop:advisor advice-ref="txAdvice" pointcut-ref="pc"/>
</aop:config>
用注解定义的事物
<tx:annotation-driven/>
在Dao中获取session
@Component
//需要在Spring配置文件中定义扫描
public class Option {
@Autowired
private SessionFactory factory;
private Session getSession(){
return factory.getCurrentSession();
//获取当前线程绑定的session,这个要在开启事物的时候使用,不然会抛出异常,
}
}
<!-- <property name="current_session_context_class">thread</property> -->