Назначенный ключ и вставка в Hibernate в одной транзакции - PullRequest
0 голосов
/ 09 мая 2011

Я использую Spring с Hibernate (и базой данных SQL Server) .Для одной из моих сущностей мне нужно сгенерировать PK, который представляет собой комбинацию числа и строки .. что-то вроде ABC1001, DEF1002 и т. Д.

Я использую 'assigned'ключ для моих сущностей, так как этот тип PK (комбинация числа и строки, то есть ABC 1001) не может быть сгенерирован с помощью простой последовательности / идентификатора.

То, что я хочу, это

  1. Создание PK с помощью идентификатора БД и увеличение значения идентификатора на 1 (для следующего поколения ПК)
  2. Объедините результат (т. Е. Число, возвращенное предыдущим шагом) с соответствующей строкой (т. Е. ABC), чтобы сделать егоPK для моей сущности, например: ABC1001
  3. Назначьте этот ключ моей сущности и сохраните мои данные, вызвав session.save ()

Есличто-то не получается, откат транзакции, т.е. откат вставки сущности и откат любых изменений, внесенных в Identity

Подход, который я имею в виду, заключается в следующем: Создать хранимую процедуру, которая может выполнить первые два шага (Генерация ПК, Инкремент Identity, объедините число со String), а затем назначьте ключ для Entity и вызовите session.save ().

Моя проблема заключается в том, что мне придется использовать HibernateCallBack для выполнения моей процедуры, где мне придетсяиметь дело с JDBC Connection.Как только метод завершится, мне придется закрыть соединение JDBC, а затем на следующем шаге я смогу продолжить сохранение своей сущности (session.save()).

Я не нахожу способ выполнить две вещи [т.е. вызвать процедуру и вызвать session.save ()] в одной транзакции.Я использую декларативную транзакцию, предлагаемую Spring.

Есть ли способ выполнить две вещи в одной транзакции, поэтому, если вставка сущности не удалась, я могу даже откатить изменения, внесенные в Identity?

Или есть лучшая стратегия, которую вы можете предложить?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...