Вопрос

@Entity
public class Person {
    @Id
    @GeneratedValue(strategy=GenerationType.IDENTITY)
    private Long id;

    private int salary;

    @Version
    private long version;

    // ...getters and setters
}
  1. Требуется ли создавать сеттер / геттер для version?
  2. При сохранении этого объекта в режиме гибернации мне не нужно устанавливать это значение вручную, верно?
  3. Что еще мне нужно настроить, чтобы использовать проверку оптимистичного параллелизма с помощью Spring hibernateTemplate.saveOrUpdate?Поддерживаются ли все базы данных?
  4. Как выполнить модульное тестирование этой сущности?В моей базе данных все мои записи, показывающие поле версии, имеют значение 0
  5. Уилл зовет hibernateTemplate.saveOrUpdate увеличивать значение версии каждый раз?
Это было полезно?

Решение

Я бы сказал:

  1. требуется установить / получить версию, так как иногда вы можете назначить версию самостоятельно (при воссоздании нового экземпляра из старых данных).
  2. Вам это не нужно, если вы читаете экземпляр из базы данных.(При создании его в вашем коде с помощью new это была бы совсем другая история).
  3. Больше я ничего не вижу.У меня никогда не было проблем с базой данных.
  4. На мой взгляд, модульные тесты не работают с базой данных, поэтому тесты, связанные с базой данных, называются интеграционными тестами.У вас не должно быть их слишком много, так как они медленные, и на самом деле они тестируют не ваш код, а скорее коды гибернации / драйвера / базы данных ...Вы должны доверять им или просто протестировать их один раз, но не для всех ваших объектов.
    Чтобы увидеть значения версии больше 0, прочитайте / измените / обновите свой объект в транзакции, увеличив версию на единицу.Выходите из транзакции, делайте это снова, стоимость увеличивается...
  5. Версия будет увеличиваться каждый раз при изменении строки базы данных.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top