Hibernate: получить сгенерированный идентификатор из вызываемой пользовательской вставки - PullRequest
1 голос
/ 24 октября 2011

У меня есть класс сущности с

@Entity
@SQLInsert(callable = true, sql = "{ call sp_InsertEntity(?, ?, ?) }")
public class Entity {
  @Id
  @GeneratedValue(strategy = GenerationType.IDENTITY)
  @Column(name = "entity_id")
  private int entityId;
...
}

sp_InsertEntity делает стандартную INSERT и возвращает @@ IDENTITY. Но после session.save (entity) значение entityId остается равным 0.

Как заставить Hibernate использовать возвращенное значение или выходной параметр или @@ IDENTITY или SCOPE_IDENTITY () для инициализации сгенерированного идентификатора?

1 Ответ

2 голосов
/ 22 ноября 2011

Возможно, чтобы прояснить это немного для других, которые сталкиваются с той же проблемой - когда вы используете <property name="jdbc.use_get_generated_keys">false</property>, hibernate не будет автоматически генерировать свой SELECT SCOPE_IDENTITY () после вашей процедуры (которая, очевидно, не работает в первую очередь,поскольку этот выбор не находится в той же области действия, что и вставка), следовательно, вы должны вручную добавить SELECT SCOPE_IDENTITY () после вставки в хранимой процедуре.

Запись хранимых процедур вставки таким образом такжесделать их совместимыми с тем, как Entity Framework обрабатывает вещи, что является хорошим плюсом.

...