我的弹簧配置:
<jee:jndi-lookup id="testDataSource" jndi-name="java:testDS" />
<bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
<property name="dataSource" ref="testDataSource" />
</bean>
<tx:annotation-driven transaction-manager="transactionManager" />
我的Java方法:
@Transactional(readOnly = true)
public List find() {
jdbcTemplate.query("SELECT * FROM my_table;");
}
如果我直接在数据库(MySQL
)上使用以下脚本:
LOCK TABLES my_table WRITE;
然后尝试使用只读事务运行java代码,它仍在等待表解锁。
由于事务被设置为只读,它不应该返回数据吗?
由于
答案 0 :(得分:1)
不,因为WRITE锁定会阻止任何没有持有锁定的人读取和写入表格。如果您改为READ,则可以执行查询。
BTW,readOnly没有在数据库中直接执行任何操作,它只是对ORM层的一个提示,即事务不会进行任何写入。