Обход GeneratedValue в Hibernate
Вопрос
Можно ли обойти @GeneratedValue
для идентификатора в Hibernate у нас есть случай, когда в большинстве случаев мы хотим, чтобы идентификатор был установлен с помощью GeneratedValue
, но в некоторых случаях хотелось бы установить идентификатор вручную.
Возможно ли это сделать?
Решение
Я знаю, что вы можете сделать это в спецификации JPA, поэтому вы сможете сделать это и в Hibernate (используя аннотации JPA+).
Если вы просто заполните поле идентификатора новой постоянной модели, которую вы создаете, то при «объединении» этой модели в EntityManager она будет использовать установленный вами идентификатор.
Однако это имеет последствия.Вы только что израсходовали этот идентификатор, но последовательность, указанная в аннотации GeneratedValue, об этом не знает.Если вы не укажете неиспользуемый идентификатор, который МЕНЬШЕ текущего значения последовательности, у вас возникнет проблема, как только последовательность догонит значение, которое вы только что использовали.
Итак, возможно, я вижу, где вы хотите, чтобы пользователь мог указать идентификатор, но тогда вам нужно отловить возможное исключение (дубликат идентификатора), которое может возникнуть в будущем.