如何设置查询为未提交读?

mrb*_*lah 5 java hibernate transactions

与休眠,我如何设置一个查询使其不提交读取?我不希望这是一个全局设置,只是想在每个查询的基础上进行设置。

小智 6

将 Spring 与 Hibernate 结合使用,可以让 Spring 通过注释控制事务,即 spring applicationContext.xml 中的一些配置,如下所示:

<bean id="transactionManager" class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- To use annotation driven in aspect mode (mode="aspectj"), it is necessary to add spring-aspects lib -->
<tx:annotation-driven transaction-manager="transactionManager" />
Run Code Online (Sandbox Code Playgroud)

实现这一目标的最佳方法是使用如下所示的注释:

@Transactional(propagation=Propagation.REQUIRED, isolation=Isolation.READ_UNCOMMITTED)
Run Code Online (Sandbox Code Playgroud)


jsp*_*cal 0

默认情况下,在您显式执行此操作之前,不会在休眠中提交语句(或者连接返回到池中并且驱动程序碰巧为您执行提交,但无法保证)。所以,它似乎已经做了你想做的事。

如果您想使自事务开始以来所做的语句无效,您也可以回滚当前事务。

在 mysql 中,你可以这样做:

set session transaction isolation level read uncommitted
Run Code Online (Sandbox Code Playgroud)

或使用axtavt 建议的方法,

在查询之前调用getTransactionIsolation()以获取当前模式,以便您可以根据需要将其放回 stmt 之后。