2012-03-30 3 views
6

У меня есть несколько таблиц, для которых у меня нет причин когда-либо обновляться из приложения, поэтому я хотел бы предотвратить случайное появление ошибки в другом месте.Можно ли рассматривать таблицу как прочитанную только в спящем режиме?

Я вижу аннотацию @Immutable, но похоже, что она все равно позволит вставлять и удалять. Я хотел бы полностью обработать всю таблицу (а не только каждую сущность), как написано на камне. Есть ли простой способ сделать это? Или я неправильно понимаю документацию на @Immutable?

Если пример нужен, позволяет сказать, что есть таблица с MONTH столом и Month сущности и APPOINTMENT таблицы с Appointment объектом, связанным. Я бы никогда не захотел удалить или вставить строку в месяц.

ответ

3

вы пробовали читать только стратегию кэширования:

Если ваше приложение должно читать, , но не изменять, экземпляры постоянного класса, кэш только для чтения могут быть использованы. Это простейшая и оптимальная стратегия исполнения. Он даже безопасен для использования в кластере.

От: 19.2.2. Strategy: read only

+0

Спасибо за ответ. Я думаю, что это то, что мне нужно. Из документации, похоже, что это по крайней мере позаботится о оптимизации с точки зрения производительности. У меня не было времени проверить для себя, если это делает главное, что я хочу, а именно _prevent_ приложения от попытки сохранить/обновить/удалить. Когда я получу шанс проверить это, я приму ответ или комментарий. – derekv

1

Одним из способов является использование READ_ONLY сделок путем помещения @Transactional(readOnly=true) по методу.

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

Другой способ: если уровень изоляции не установлен, если ваша таблица никогда не вставлена ​​или не обновлена, вы можете использовать уровень изоляции READ_UNCOMMITTED, который позволяет выполнять грязные чтения, не повторяемые чтения и фантомные чтения. Однако ничто из этого не имеет значения, поскольку данные никогда не меняются.

Вы можете посмотреть на различных уровнях изоляции и эффектов каждого в весенних Javadocs (http://docs.huihoo.com/javadoc/spring/2.5/org/springframework/transaction/annotation/Isolation.html)

Это освободит замки на ряды наиболее и даст вам лучшую производительность, по крайней мере, насколько замок идет

+0

Уровень изоляции, что, кажется, помогает поможет производительности, спасибо за давая мне знать об этом. Но действительно ли это предотвратит чтение/сохранение/обновление? Также хорошо знать Transactional (readOnly = true), я думаю, что в некоторых случаях это может быть идеально. Если бы вы могли установить его для целого объекта, это было бы прекрасно. – derekv

+0

Я не уверен, но я так не думаю. Это позволит вставлять, но это быстро, так как никакой блокировки не выдается. Для обработки INSERTS используйте параметр readOnly = true. Он будет генерировать исключение при вставке. Я подтвержу, если в противном случае будет правильный ответ. – instanceOfObject

Смежные вопросы