Версия JPA @:как им пользоваться?
Вопрос
@Entity
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private int salary;
@Version
private long version;
// ...getters and setters
}
- Требуется ли создавать сеттер / геттер для
version
? - При сохранении этого объекта в режиме гибернации мне не нужно устанавливать это значение вручную, верно?
- Что еще мне нужно настроить, чтобы использовать проверку оптимистичного параллелизма с помощью Spring
hibernateTemplate.saveOrUpdate
?Поддерживаются ли все базы данных? - Как выполнить модульное тестирование этой сущности?В моей базе данных все мои записи, показывающие поле версии, имеют значение 0
- Уилл зовет
hibernateTemplate.saveOrUpdate
увеличивать значение версии каждый раз?
Решение
Я бы сказал:
- требуется установить / получить версию, так как иногда вы можете назначить версию самостоятельно (при воссоздании нового экземпляра из старых данных).
- Вам это не нужно, если вы читаете экземпляр из базы данных.(При создании его в вашем коде с помощью new это была бы совсем другая история).
- Больше я ничего не вижу.У меня никогда не было проблем с базой данных.
- На мой взгляд, модульные тесты не работают с базой данных, поэтому тесты, связанные с базой данных, называются интеграционными тестами.У вас не должно быть их слишком много, так как они медленные, и на самом деле они тестируют не ваш код, а скорее коды гибернации / драйвера / базы данных ...Вы должны доверять им или просто протестировать их один раз, но не для всех ваших объектов.
Чтобы увидеть значения версии больше 0, прочитайте / измените / обновите свой объект в транзакции, увеличив версию на единицу.Выходите из транзакции, делайте это снова, стоимость увеличивается... - Версия будет увеличиваться каждый раз при изменении строки базы данных.
Не связан с StackOverflow