2017-10-31 20 views
0

私の環境は次のとおりです。
春ブーツ+ MyBatisの+のOracle 10g + Jdk1.8オラクルキャッシュ混乱(最新を取得することはできません)

私はこのようにOracleでテーブルという名前の本を得ました:

+---------+------+--------+ 
| book_id | name | number | 
+---------+------+--------+ 
|  1 | b1 | 123 | 
|  2 | b2 | 123 | 
|  3 | b3 | 2343 | 
+---------+------+--------+ 
3 rows in set (0.00 sec) 

私はそれが動作するようになったと私はPLSQLで、この表の中に2つの以上のレコードを挿入した後、私は.Butを書いたマッパーと正常に表示され、私はまだ代わりに、すべての5(以下など)の同じ3つのレコードを得ました私はmybatisマッパーでそれを照会するとき。

+---------+------+--------+ 
| 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のを使用して、正常に表示されている理由?私は明確なOracleのキャッシュ毎回?これは、そこよりよい解決策をright.Isを感じていないべきmapper.But? 回答が参考になります。 THX

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 


} 
+0

コードを追加してください。ちょうどテキストを見て理解するのは非常に難しいです。あなたのマッパーと設定クラスを表示する –

+0

また、ダオ層でデバッグすることをお勧めしますか?db/ –

+0

で追加した後にすべてのレコードを取得していますか?私のコードを追加しました。 – xuqh

答えて

0

問題は、キャッシュのクリアとは関係ありません。

あなたのinsert(a DML)の文の後にcommitを発行する以外は問題はないと思います。

commitを発行していない場合は、別のセッションから3つのレコードしか取得できません。

しかし、あなたの問題の後、(a DDL)

NOCACHE

ALTER TABLE帳、暗黙のコミットが発生し、すべての5つのレコードを見ることができました。

+0

はい、この問題の原因となったコミットです!Thx a lot – xuqh

+0

@大歓迎です。 –

関連する問題