2012-03-30 3 views
6

Mam kilka tabel, dla których nie mam żadnego powodu, aby kiedykolwiek aktualizować z poziomu aplikacji, więc chciałbym zapobiec temu nawet przypadkowo przez błąd w innym miejscu.Czy można traktować tabelę jako tylko do odczytu w trybie hibernacji?

Widzę adnotację @Immutable, ale wygląda na to, że nadal będzie można wstawiać i usuwać. Chciałbym w pełni potraktować cały stół (nie tylko każdy podmiot) jako napisany w kamieniu. Czy istnieje prosty sposób na osiągnięcie tego? Czy mogę źle zrozumieć dokumentację na @Immutable?

Jeśli przykładem jest potrzebne, powiedzmy, że istnieje tabela z MONTH stole, a jednostka Month i APPOINTMENT stół z Appointment podmiotem powiązanym. Nigdy nie chciałbym usunąć ani wstawić wiersza na miesiąc.

Odpowiedz

3

Czy próbowali odczytać tylko buforowanie strategii:

Jeśli aplikacja potrzebuje czytać, ale nie modyfikować , przypadki trwałego klasy, pamięć podręczna tylko do odczytu mogą być użyte. Jest to najprostsza i optymalnie działająca strategia. Jest nawet bezpieczny do użycia w klastrze.

Od: 19.2.2. Strategy: read only

+0

Dzięki za odpowiedź. Myślę, że tego właśnie potrzebuję. Z dokumentacji wynika, że ​​to przynajmniej zajmie się optymalizacją z punktu widzenia wydajności. Nie miałem czasu na weryfikację samej siebie, jeśli to jest najważniejsze, czego chcę, aby uniemożliwić aplikacji podjęcie próby zapisu/aktualizacji/usunięcia. Kiedy otrzymam szansę, aby to zweryfikować, przyjmuję odpowiedź lub komentarz do wiadomości. – derekv

1

Jednym ze sposobów jest użycie transakcji READ_ONLY poprzez umieszczenie @Transactional(readOnly=true) nad metodą.

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

Inna metoda: Jeśli chodzi o poziom izolacji przejść, jeśli tabela nie jest włożona lub zaktualizowane można użyć READ_UNCOMMITTED poziom izolacji, który umożliwia brudny czyta, nie powtarzalne czyta i czyta phantom. Jednak nic z tego nie ma znaczenia, ponieważ dane nigdy się nie zmieniają.

Możesz zajrzeć na różnych poziomach izolacji i skutków każdy w Javadocs sprężystych (http://docs.huihoo.com/javadoc/spring/2.5/org/springframework/transaction/annotation/Isolation.html)

To uwolni zamki w rzędach najbardziej i daje najlepszą wydajność, przynajmniej jeśli chodzi o blokowanie idzie

+0

Rzecz poziom izolacji wydaje się pomóc pomoże w wydajności, dzięki za poinformowanie mnie o tym. Ale czy rzeczywiście uniemożliwi odczyt/zapis/aktualizację? Transactional (readOnly = true) jest również dobrze wiedzieć, myślę, że w niektórych przypadkach może to być idealne. Gdybyś mógł ustawić dla całego bytu, byłby idealny. – derekv

+0

Nie jestem pewien, ale nie sądzę. Pozwoli to na wstawianie, ale jest szybkie, ponieważ nie zostanie wydany żaden zamek. Aby obsłużyć INSERTS użyj opcji readOnly = true. Wyrzuci wyjątek podczas wstawiania. Potwierdzę, że poprawna odpowiedź jest inna. – instanceOfObject