Читаем Изучаем Java EE 7 полностью

МетодОписание
T find(Class entityClass, Object primaryKey, LockModeType lockMode)Выполняет поиск сущности указанного класса и первичного ключа, а затем блокирует ее согласно заданному типу режима блокировки
void lock(Object entity, LockModeType lockMode)Блокирует экземпляр сущности, который содержится в контексте постоянства, согласно заданному типу режима блокировки
void refresh(Object entity, LockModeType lockMode)Обновляет состояние экземпляра из базы данных, перезаписывая изменения, внесенные в сущность, при наличии таковых, и блокирует ее согласно заданному типу режима блокировки
LockModeType getLockMode(Object entity)Извлекает значение текущего режима блокировки для экземпляра сущности
Таблица 6.6. Методы Query для блокировки JPQL-запросов
МетодОписание
LockModeType getLockMode()Извлекает значение текущего режима блокировки для запроса
Query setLockMode(LockModeType lockMode)Задает тип режима блокировки для использования при выполнении запроса

Каждый из этих методов принимает LockModeType в качестве параметра, который, в свою очередь, может хранить разные значения:

• OPTIMISTIC — применяет оптимистическую блокировку;

• OPTIMISTIC_FORCE_INCREMENT — применяет оптимистическую блокировку и форсирует инкрементирование значения столбца version, связанного с сущностью (см. следующий подраздел «Контроль версий»);

• PESSIMISTIC_READ — применяет пессимистическую блокировку без необходимости в повторном чтении данных в конце транзакции для обеспечения блокировки;

• PESSIMISTIC_WRITE — применяет пессимистическую блокировку и форсирует сериализацию между транзакциями, которые пытаются обновить сущность;

• PESSIMISTIC_FORCE_INCREMENT — применяет пессимистическую блокировку и форсирует инкрементирование значения столбца version, связанного с сущностью (см. подраздел «Контроль версий» далее);

• NONE — определяет, что не должен использоваться никакой механизм блокировки.

Вы можете задавать эти параметры во многих местах в зависимости от того, как необходимо указать блокировки. Вы можете обеспечить чтение, а затем — блокировку.

Book book = em.find(Book.class, 12);

// Блокировать, чтобы повысить цену

em.lock(book, LockModeType.OPTIMISTIC_FORCE_INCREMENT);

book.raisePriceByTwoDollars();

Либо вы можете обеспечить чтение и блокировку.

Book book = em.find(Book.class, 12, LockModeType.OPTIMISTIC_FORCE_INCREMENT);

// Блокировка уже применена к сущности Book, повысить цену

book.raisePriceByTwoDollars();

Конкурентный доступ и блокировки являются ключевыми мотиваторами для контроля версий.

<p>Контроль версий</p>

В случае со спецификациями Java применяется контроль версий: Java SE 5.0, Java SE 6.0, EJB 3.1, JAX-RS 1.0 и т. д. При выходе новой версии JAX-RS ее номер увеличивается и вы переходите на JAX-RS 1.1. JPA использует этот точный механизм, когда вам необходимо присвоить номера версий сущностям. Таким образом, когда вы в первый раз обеспечите постоянство сущности в базе данных, она получит номер версии, равный 1. Позднее, если вы обновите атрибут и зафиксируете это изменение в базе данных, номер версии сущности будет равен уже 2 и т. д. Номер версии будет модифицироваться при каждом внесении изменений в сущность.

Чтобы это происходило, у сущности должен иметься атрибут для сохранения номера версии, снабженный аннотацией @Version. Он в дальнейшем отображается в столбец в базе данных. К числу типов атрибутов, поддерживающих контроль версий, относятся int, Integer, short, Short, long, Long и Timestamp. В листинге 6.36 показано, как добавить атрибут version в код сущности Book.

Листинг 6.36. Сущность Book с аннотацией @Version в случае с Integer

@Entity

public class Book {

··@Id @GeneratedValue

··private Long id;

··@Version

Перейти на страницу:

Похожие книги

1С: Бухгалтерия 8 с нуля
1С: Бухгалтерия 8 с нуля

Книга содержит полное описание приемов и методов работы с программой 1С:Бухгалтерия 8. Рассматривается автоматизация всех основных участков бухгалтерии: учет наличных и безналичных денежных средств, основных средств и НМА, прихода и расхода товарно-материальных ценностей, зарплаты, производства. Описано, как вводить исходные данные, заполнять справочники и каталоги, работать с первичными документами, проводить их по учету, формировать разнообразные отчеты, выводить данные на печать, настраивать программу и использовать ее сервисные функции. Каждый урок содержит подробное описание рассматриваемой темы с детальным разбором и иллюстрированием всех этапов.Для широкого круга пользователей.

Алексей Анатольевич Гладкий

Программирование, программы, базы данных / Программное обеспечение / Бухучет и аудит / Финансы и бизнес / Книги по IT / Словари и Энциклопедии
1С: Управление торговлей 8.2
1С: Управление торговлей 8.2

Современные торговые предприятия предлагают своим клиентам широчайший ассортимент товаров, который исчисляется тысячами и десятками тысяч наименований. Причем многие позиции могут реализовываться на разных условиях: предоплата, отсрочка платежи, скидка, наценка, объем партии, и т.д. Клиенты зачастую делятся на категории – VIP-клиент, обычный клиент, постоянный клиент, мелкооптовый клиент, и т.д. Товарные позиции могут комплектоваться и разукомплектовываться, многие товары подлежат обязательной сертификации и гигиеническим исследованиям, некондиционные позиции необходимо списывать, на складах периодически должна проводиться инвентаризация, каждая компания должна иметь свою маркетинговую политику и т.д., вообщем – современное торговое предприятие представляет живой организм, находящийся в постоянном движении.Очевидно, что вся эта кипучая деятельность требует автоматизации. Для решения этой задачи существуют специальные программные средства, и в этой книге мы познакомим вам с самым популярным продуктом, предназначенным для автоматизации деятельности торгового предприятия – «1С Управление торговлей», которое реализовано на новейшей технологической платформе версии 1С 8.2.

Алексей Анатольевич Гладкий

Финансы / Программирование, программы, базы данных