Беспорядок кэша оракула с результатами запроса mybatis (не может получить последнее)
Моя среда это:
Spring Boot + Mybatis + Oracle 10g + Jdk1.8
Я получил таблицу с именем book в oracle вот так:
+---------+------+--------+
| book_id | name | number |
+---------+------+--------+
| 1 | b1 | 123 |
| 2 | b2 | 123 |
| 3 | b3 | 2343 |
+---------+------+--------+
3 rows in set (0.00 sec)
Я заставил его работать и успешно отобразил его с помощью созданного мэппером. Но после того, как я вставил еще 2 записи в эту таблицу с помощью plsql, я все равно получил те же 3 записи вместо всех 5(как показано ниже), когда я запрашивал его с помощью mybatis mapper,
+---------+------+--------+
| book_id | name | number |
+---------+------+--------+
| 1 | b1 | 123 |
| 2 | b2 | 123 |
| 3 | b3 | 2343 |
| 4 | b4 | 22343 |
| 5 | b5 | 43 |
+---------+------+--------+
5 rows in set (0.00 sec)
Затем я изменяю стратегию кэширования в oracle, как это.
alter table book nocache
Это снова сработало! Все 5 записей успешно отображаются с помощью mybatis mapper. Но почему? Должен ли я каждый раз очищать кеш оракула? Это не правильно. Есть лучшее решение? Любой ответ будет полезен. Спасибо
application.properties
# Spring
spring.resources.static-locations=classpath:/static/
# MyBatis
mybatis.configuration.map-underscore-to-camel-case=true
mybatis.configuration.local-cache-scope=statement
# DataSource 1
spring.datasource.db1.url=jdbc:oracle:thin:@*******
spring.datasource.db1.username=***
spring.datasource.db1.password=***
spring.datasource.db1.driver-class-bookName=oracle.jdbc.OracleDriver
картопостроитель
@Mapper
@Qualifier("bookMapper")
public interface BookMapper {
@Select({"select * from book"})
@Options(useCache = false)
@Results({
@Result(property = "bookId",column = "book_id"),
@Result(property = "bookName",column = "book_name"),
@Result(property = "bookNumber",column = "book_number")
})
List<BookEntity> getALL();
// insertBook();
}
юридическое лицо
public class BookEntity {
long bookId;
String bookName;
int bookNumber;
//getters and setters
}
1 ответ
Проблема не связана с очисткой кэша.
Я думаю, что нет никаких проблем, кроме выдачи commit
после вашего insert( a DML )
заявление.
Если вы не выпустили commit
Вы можете получить только 3 записи из другого сеанса.
Но после того, как вы выпустите,
изменить настольную книгу nocache
( a DDL )
, происходит неявная фиксация, и вы можете увидеть все 5 записей.