TransientObjectException при сохранении деталей в базе данных - PullRequest
0 голосов
/ 20 сентября 2010

«Таблица 1» может иметь несколько экземпляров «Таблица 2». «Таблица 2» отображается один на один с «Таблицей А». Но экземпляр для «Таблицы A» создается «Таблицей B». «Таблица 1» не всегда должна иметь запись «Таблица 2».

В таблице 2 есть два столбца, например, tb1 и tbA. tb1 ссылается на первичный ключ «Таблицы 1», а tbA - на «Таблицу А».

Если сначала сохранить данные для таблицы A, а затем данные для таблицы 1, то все будет работать нормально. Но если я сохраняю сохранение содержимого таблицы 1, в которой есть сопоставление записи таблицы 2 и записи таблицы A еще не сохранено, я получаю исключение TransientObjectException.

Я использую спящий режим и аннотации в JAVA. Я пробовал каскадные ассоциации и любые другие возможные решения, которые я мог найти в сети. Но бесполезно. Пожалуйста, добавьте некоторые идеи.

Пример: рассмотрим таблицу 1 = человек; Таблица 2 = принадлежность; Таблица A = Автомобиль; Таблица B = Производитель. Человек может иметь много автомобилей. У автомобиля есть person_id (ссылка на Персона) и car_id (Автомобиль). Автомобиль обязательно должен иметь производителя. Теперь в моем приложении Person будет связан с автомобилем, который создан Производителем, но не сохранен (то есть car_id еще не сгенерирован). Теперь, когда я сохраняю данные сеанса в целом (как это можно сделать в моем случае), я хочу, чтобы сначала были сохранены автомобильные данные, а затем bcos данных Person, тогда TransientObjectException не возникнет. Любые предложения о том, как это сделать. Надеюсь, что пример лучше.

1 Ответ

0 голосов
/ 20 сентября 2010

Вашему примеру невероятно сложно следовать, и показ некоторого (псевдо) кода, вероятно, поможет. Но согласно моему пониманию вашего описания, вам может понадобиться session.merge() в вашем случае.

...