【问题标题】:Mybatis caching and concurrent modficationsMybatis缓存和并发修改
【发布时间】:2012-02-02 13:56:22
【问题描述】:

我正在使用 mybatis 3.0.4 对带有 mysql-connector JDBC 驱动程序版本 5.1.16 的 mysql 5.5 数据库进行测试。

我遇到的问题是,如果我通过 openSession() 方法获得一个 SqlSession,并且我通过从数据库中选择检索数据,则同一会话中的后续选择不知道对数据库所做(和提交)的更改,即使我在会话中调用 clearCache()。要同时修改数据库,我正在使用 Mysql 命令行客户端。在配置文件中将 cacheEnabled 设置为 false 也无济于事。

我附上配置文件。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration
PUBLIC "-//ibatis.apache.org//DTD Config 3.0//EN"
"http://ibatis.apache.org/dtd/ibatis-3-config.dtd">
<configuration>

    <settings>
        <setting name="lazyLoadingEnabled" value="false"/>
        <setting name="cacheEnabled" value="false"/>
    </settings>

    <environments default="development">
        <environment id="development">
            <transactionManager type="JDBC" />
            <dataSource type="POOLED">

                <property name="poolMaximumIdleConnections" value="20"></property> 
                <property name="poolMaximumActiveConnections" value="80"></property> 
                <property name="poolMaximumCheckoutTime" value="600"></property> 
                <property name="poolTimeToWait" value="600"></property> 


                <property name="driver" value="com.mysql.jdbc.Driver"/>
                <property name="url" value="jdbc:mysql://localhost:3306/testdb"/>
                <property name="username" value="root"/>
                <property name="password" value="password"/>
            </dataSource>       
        </environment>
    </environments>

    <mappers>
        <mapper resource="mappers/TestMapper.xml" />
    </mappers>

</configuration>

【问题讨论】:

  • 好的,自己解决了。这不是 mybatis 的问题,它取决于 JDBC 驱动程序上的事务隔离,默认情况下是 TRANSACTION_REPEATABLE_READ,我需要 TRANSACTION_READ_COMMITTED。解决了codegetSessionFactory().openSession(TransactionIsolationLevel.READ_COMMITTED);code
  • 将您的评论移动到答案中并标记已接受的问题。 stackoverflow.com/help/self-answer

标签: mybatis


【解决方案1】:

好的,我自己解决了。这不是 mybatis 的问题,它取决于 JDBC 驱动程序上的事务隔离,默认情况下是 TRANSACTION_REPEATABLE_READ,我需要 TRANSACTION_READ_COMMITTED。解决方法:

getSessionFactory().openSession(TransactionIsolationLevel.READ_COMMITTED);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-02-17
    • 2011-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-13
    • 2013-01-28
    • 1970-01-01
    相关资源
    最近更新 更多