2013-09-10 5 views
1

Вот моя проблема:Зависимые операции в спящий режим

У меня есть 2 таблицы A и B. Мне нужно решить проблему ниже, используя спящий режим JPA менеджера объекта.

В одном запросе я отправляю данные. Во-первых, мне нужно вставить строку в таблицу A, где один идентификатор будет сгенерирован генератором последовательности (который является первичным ключом). Затем в таблице b мне нужно вставить данные, которые были отправлены в запросе, и первичный ключ, сгенерированный выше, будет действовать как внешний ключ в таблице B.

+2

Кажется, простая транзакция может справиться с этим сценарием. Ты это пробовал? Какие конкретные проблемы вы нашли? – acdcjunior

+0

Я пробовал через \t @Transactional (распространение = Размножение.REQUIRED) аннотация, но проблема здесь в таблице 2 мне нужно вставить две строки ... там она бросает ограничение первичной клавиши voilated исключение ... точная вещь wat am doign is .. – user2765261

+0

Возможно, это поможет, если вы продемонстрируете свой код и сопоставления. – Thierry

ответ

1

Вы можете сделать это с помощью одной транзакции, как указано acdcjunior. Сессия Hibernate ожидает выполнения DML до тех пор, пока сеанс не совершит транзакции (поэтому он может изменить порядок действий SQL), но вы можете сказать ему, чтобы он выполнил все, что у него есть. Номер последовательности будет сгенерирован для вас, когда будет выполняться первая вставка.

Если вы вызвали сброс в текущем сеансе после сохранения A, это приведет к тому, что SQL-код вставки для A будет выполнен в базе данных (без совершения транзакции). Затем Hibernate заполнит поле ключа на вашем объекте A сгенерированным значением ключа, и вы можете использовать его для заполнения поля FK на объекте B.

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

Смежные вопросы