Скажите Hibernate использовать @Version вместо @Id для проверки состояния сохраняемости … используя аннотации?

#hibernate #hibernate-mapping

#hibernate #hibernate-сопоставление

Вопрос:

Я борюсь с проблемой, описанной здесь. У меня есть постоянный класс, который я хочу сделать безопасным для сбора данных, переопределив hashCode() и equals() . Поскольку у моей сущности нет хорошего естественного ключа, этим методам потребуется использовать @Id поле, поэтому мне нужно назначить идентификатор во время создания объекта. Но теперь Hibernate понадобится другой способ определить, является ли экземпляр временным или постоянным, и логическое поле для этого использовать @Version .

Я знаю, что мог бы сделать это в файле hbm с помощью <version unsaved-value="null"> . Но я использовал аннотации, которые не поддерживают unsaved-value атрибут. Если я просто использую обычную @Version аннотацию, будет ли Hibernate достаточно умен, чтобы использовать его для определения состояния сохраняемости? Я проверил документацию Hibernate, но она немного неоднозначна.

Кто-нибудь знает о решении, отличном от переноса сопоставления для всего класса в файл hbm?

Ответ №1:

Подумайте еще раз о своей модели сущности. Если вы не можете найти естественный ключ (даже составной), у вас может возникнуть проблема здесь.

Не вводите свой идентификатор в equals() / hashCode() и используйте аннотацию @Version только по назначению. Это усложнит вашу жизнь.