Spring的编程式事务处理,需要使用Hibernate事务回调接口,事务回调接口可以管理Hibernate的事务:
TransactionCallbackWithoutResult —— 执行事务没有返回值,例如save、update、delete等等;
TransactionCallback —— 执行事务处理后有返回值,如find要返回结果集(List);
spring相关配置
TransactionCallbackWithoutResult —— 执行事务没有返回值,例如save、update、delete等等;
TransactionCallback —— 执行事务处理后有返回值,如find要返回结果集(List);
spring相关配置
<!-- dataSource -->
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<!-- Connection Info -->
<property name="driverClassName" value="oracle.jdbc.driver.OracleDriver" />
<property name="url" value="jdbc:oracle:thin:@192.168.26.188:1521:xxx" />
<property name="username" value="xx" />
<property name="password" value="xx" />
<!-- Connection Pooling Info -->
<property name="initialSize" value="3" />
<property name="maxActive" value="5" />
<property name="maxIdle" value="30" />
<property name="maxWait" value="1000" />
<property name="poolPreparedStatements" value="true" />
<property name="defaultAutoCommit" value="true" />
</bean>
<bean id="dataSourceTransactionManager"
class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<constructor-arg ref="dataSource" />
</bean>
<bean id="transactionTemplate"
class="org.springframework.transaction.support.TransactionTemplate">
<constructor-arg ref="dataSourceTransactionManager" />
</bean>
public void createPerson(final Person person) {
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
transactionTemplate.execute(new TransactionCallbackWithoutResult(){ // 使用无返回值的事务回调接口
@Override
protected void doInTransactionWithoutResult(TransactionStatus arg0) {
getHibernateTemplate().save(person);
}
});
}
public Person queryOnePerson(final String hql) {
transactionTemplate.setPropagationBehavior(TransactionDefinition.PROPAGATION_REQUIRED);
return (Person)transactionTemplate.execute(new TransactionCallback(){ // 使用带返回值的事务回调接口
public Object doInTransaction(TransactionStatus arg0) {
return getHibernateTemplate().find(hql).get(0);
}
});
}
6743

被折叠的 条评论
为什么被折叠?



