Кеширане на Mybatis и едновременни модификации

Използвам mybatis 3.0.4 за тест срещу mysql 5.5 база данни с mysql-connector JDBC драйвер, версия 5.1.16.

Проблемът, който изпитвам, е, че ако получа SqlSession чрез метода openSession() и извлека данни чрез избор от базата данни, следващите селекти в същата сесия не са наясно с промените, направени (и ангажирани) в базата данни, дори ако извикам 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>

person lucabu    schedule 02.02.2012    source източник
comment
Добре, решен съм сам. Това не беше проблем на mybatis, зависеше от изолацията на транзакция на JDBC драйвера, който по подразбиране беше TRANSACTION_REPEATABLE_READ, вместо това имах нужда от TRANSACTION_READ_COMMITTED. Решено с code getSessionFactory().openSession(TransactionIsolationLevel.READ_COMMITTED);code   -  person lucabu    schedule 06.02.2012
comment
преместете коментара си в отговор и маркирайте въпроса като приет. stackoverflow.com/help/self-answer   -  person Andy    schedule 21.10.2014


Отговори (1)


Добре, решен съм сам. Това не беше проблем на mybatis, зависеше от изолацията на транзакция на JDBC драйвера, който по подразбиране беше TRANSACTION_REPEATABLE_READ, вместо това имах нужда от TRANSACTION_READ_COMMITTED. Решено с:

getSessionFactory().openSession(TransactionIsolationLevel.READ_COMMITTED);
person lucabu    schedule 02.08.2018