2012-03-30 13 views
6

Ho alcune tabelle per le quali non ho alcun motivo per aggiornare da dentro l'applicazione, quindi vorrei impedire che accada anche accidentalmente da un bug da qualche altra parte.E 'possibile trattare una tabella come letto solo in sospensione?

Vedo l'annotazione @Immutable, ma sembra che consentirà comunque inserimenti e cancellazioni. Mi piacerebbe dedicare tutto il tavolo (non solo a ciascuna entità) come scritto nella pietra. C'è un modo semplice per realizzare questo? O fraintendere la documentazione su @Immutable?

Se è necessario un esempio, poniamo che c'è un tavolo con MONTH tavolo, e un'entità Month, e un tavolo APPOINTMENT con Appointment entità associata. Non vorrei mai cancellare o inserire una riga nel mese.

risposta

3

hai provato solo leggere strategia di caching:

Se la vostra applicazione ha bisogno di leggere, ma non modificare , le istanze di una classe persistente, una cache di sola lettura possono essere utilizzati. Questa è la strategia più semplice e ottimale. È persino sicuro da usare in un cluster.

Da: 19.2.2. Strategy: read only

+0

Grazie per la risposta. Penso che questo sia ciò di cui ho bisogno. Dalla documentazione, sembra che questo si occuperà almeno di ottimizzare dal punto di vista delle prestazioni. Non ho avuto il tempo di verificare per me stesso se questo fa la cosa principale che voglio, che è di _prevent_ l'applicazione dal tentativo di salvare/aggiornare/eliminare. Quando avrò la possibilità di verificarlo, accetterò una risposta o un commento. – derekv

1

Un modo è utilizzare le transazioni READ_ONLY inserendo il metodo @Transactional(readOnly=true).

http://www.codeinstructions.com/2009/04/read-only-transactions-with-spring-and.html.

Un altro metodo: per quanto riguarda i livelli di isolamento, se la tabella non viene mai inserita o aggiornata, è possibile utilizzare il livello di isolamento READ_UNCOMMITTED, che consente letture sporche, letture non ripetibili e letture phantom. Tuttavia niente di ciò è importante dal momento che i dati non cambiano mai.

Potete guardare i diversi livelli di isolamento e gli effetti di ciascuna delle javadocs molla (http://docs.huihoo.com/javadoc/spring/2.5/org/springframework/transaction/annotation/Isolation.html)

Questo consentirà di liberare le serrature sulle righe di più e vi darà le migliori prestazioni, almeno per quanto riguarda la chiusura va

+0

La cosa livello di isolamento sembra aiutare aiuterà con le prestazioni, grazie per avermi permesso di conoscere su di esso. Ma in realtà impedirà letture/salvataggi/aggiornamenti? Anche il Transactional (readOnly = true) è buono da sapere, penso che in alcuni casi questo potrebbe essere perfetto. Se potessi impostarlo per un'entità intera, sarebbe perfetto. – derekv

+0

Non sono sicuro, ma non penso. Consentirà inserti ma è veloce in quanto non viene emesso alcun blocco. Per gestire INSERTS usa l'opzione readOnly = true. Durante l'inserimento genererà un'eccezione. Confermerò se la risposta corretta è diversamente. – instanceOfObject

Problemi correlati