Вопрос

Можно ли обойти @GeneratedValue для идентификатора в Hibernate у нас есть случай, когда в большинстве случаев мы хотим, чтобы идентификатор был установлен с помощью GeneratedValue, но в некоторых случаях хотелось бы установить идентификатор вручную.

Возможно ли это сделать?

Это было полезно?

Решение

Я знаю, что вы можете сделать это в спецификации JPA, поэтому вы сможете сделать это и в Hibernate (используя аннотации JPA+).

Если вы просто заполните поле идентификатора новой постоянной модели, которую вы создаете, то при «объединении» этой модели в EntityManager она будет использовать установленный вами идентификатор.

Однако это имеет последствия.Вы только что израсходовали этот идентификатор, но последовательность, указанная в аннотации GeneratedValue, об этом не знает.Если вы не укажете неиспользуемый идентификатор, который МЕНЬШЕ текущего значения последовательности, у вас возникнет проблема, как только последовательность догонит значение, которое вы только что использовали.

Итак, возможно, я вижу, где вы хотите, чтобы пользователь мог указать идентификатор, но тогда вам нужно отловить возможное исключение (дубликат идентификатора), которое может возникнуть в будущем.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top