15
@Entity
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private int salary;
@Version
private long version;
// ...getters and setters
}
- Требуется ли создать сеттер/геттер для
version
? - При сохранении этой сущности с Hibernate, мне не нужно устанавливать это значение вручную, правильно?
- Что еще мне нужно настроить, чтобы использовать оптимистичную проверку параллелизма с помощью Spring
hibernateTemplate.saveOrUpdate
? Поддерживаются ли все базы данных? - Как провести тестирование этого объекта? В моей базе данных все мои записи, отображающие поле версии, имеют значение 0
- Будет ли вызов
hibernateTemplate.saveOrUpdate
увеличивать значение версии каждый раз?
@ KLE на всякий случай 2 пользовательский вызов hibernatetemplate.saveorupdate в то же время, нет необходимости ставить дополнительную проверку при вызове hibernatetemplate.saveorupdate? любое исключение бросает? – cometta
@cometta Точка не в том, чтобы сохранить или нет, но откуда поступают данные. В транзакции **, если вы читаете объект из базы данных **, информация о версии обновлена. Когда вы его сохраняете, это берется автоматически. Если вы когда-нибудь захотите получить данные из другого источника (например, сообщение формы) и заново создадите объект, то вам придется заботиться о версии самостоятельно. – KLE
Очень хорошее объяснение здесь: http://en.wikibooks.org/wiki/Java_Persistence/Locking – Zilvinas