1. 纯的JDBC写法,通过Connection设置为脏读
conn.setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);
conn.setReadOnly(true);//如果不操作数据库,可设置只读
2.支持Transactional注解的框架,直接在方法上加注解即可
@Transactional(isolation = Isolation.READ_UNCOMMITTED,readOnly=true)
3.Spring中配置
<bean id="basicTxProxy" abstract="true"
class="org.springframework.transaction.interceptor.TransactionProxyFactoryBean">
<property name="transactionManager" ref="transactionManager"/>
<!-- force to use cglib -->
<property name="proxyTargetClass" value="true"/>
<property name="transactionAttributes">
<props>
<prop key="add*">PROPAGATION_REQUIRED</prop>
<prop key="modify*">PROPAGATION_REQUIRED</prop>
<prop key="remove*">PROPAGATION_REQUIRED</prop>
<prop key="get*">PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly</prop>
<prop key="query*">PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly</prop>
<prop key="load*">PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly</prop>
<prop key="find*">PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly</prop>
<!-- 将需要设置脏读的方法名,配置到key (此处假设方法名称为queryTestReadKey)-->
<prop key="queryTestReadKey">
PROPAGATION_REQUIRED,ISOLATION_READ_UNCOMMITTED,readOnly
</prop>
<prop key="*">PROPAGATION_REQUIRED</prop>
</props>
</property>
</bean>
4.hibernate中session方法
Sesssion session = this.getSessionFactory().getCurrentSession();
//sesion.connection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);//已过期
SessionFactoryUtils.getDataSource(getSessionFactory()).getConnection().setTransactionIsolation(Connection.TRANSACTION_READ_UNCOMMITTED);