2017-10-31 2 views
0

Meine Umgebung ist:
Frühlings-Boot + Mybatis + Oracle 10g + Jdk1.8Orakel Cache Chaos mit Mybatis Abfrageergebnisse (kann nicht die neueste erhalten)

Ich habe ein Bildband in Oracle wie folgt benannt:

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

ich habe es ihm zu arbeiten und angezeigt erfolgreich mit dem Mapper i .Aber schrieb, nachdem ich 2 weitere Datensätze in dieser Tabelle mit plsql einfügen, ich habe immer noch die gleichen 3 Datensätze statt alle 5 (wie unten) wenn ich es mit mybatis mapper abfrage.

+---------+------+--------+ 
| 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) 

Dann ändere ich die Cache-Strategie in Orakel wie folgt.

alter table book nocache 

Es funktionierte wieder! Alle 5 Datensätze angezeigt werden die Mybatis mapper.But warum erfolgreich mit? Soll ich jedes Mal klar Orakel Cache? Diese right.Is fühlt sich nicht eine bessere Lösung? Jede Antwort wäre hilfreich. 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

@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(); 
} 

Entität

public class BookEntity { 
    long bookId; 
    String bookName; 
    int bookNumber; 

    //getters and setters 


} 
+0

Bitte fügen Sie Ihren Code hinzu. Es ist sehr schwer zu verstehen, wenn man nur Text betrachtet. Zeigen Sie Ihre Mapper und Config-Klasse –

+0

Auch würde ich vorschlagen, in der Dao-Ebene zu debuggen, ob Sie alle Datensätze nach dem Hinzufügen in der db/ –

+0

bekommen Mein Code jetzt hinzugefügt. Können Sie mir helfen pls. – xuqh

Antwort

0

Das Problem ist nicht auf Cache-Clearing verwandt.

Ich denke, es gibt kein Problem außer die Ausgabe einer commit nach Ihrer insert(a DML) Aussage.

Wenn Sie keine commit ausgegeben haben, können Sie nur 3 Datensätze von einer anderen Sitzung erhalten.

Aber nachdem Sie Ausgabe,

alter table book nocache (a DDL)

, ein implizites Commit auftreten, und man konnte alle 5 Aufzeichnungen sehen.

+0

Ja, es ist das Commit, das dieses Problem verursacht! Thx viel – xuqh

+0

@ Sie sind willkommen. –