Я создал объект A {id: long (AutIncrement), name: String}, который я сохраню в Orupdate с помощью спящего режима.

Я хочу знать, перед сохранением A будет сгенерированный идентификатор. Мне это нужно, потому что мне нужно установить свойства в A, которые зависят от свойств объекта B, но у меня также есть свойства в B, зависящие от объекта A.

Это своего рода круговая зависимость. При заполнении B мне нужен идентификатор A, при заполнении A мне нужно одно сгенерированное свойство B.

Есть ли способ узнать до сохранения A, какой будет его идентификатор.

Заранее спасибо rgd

0
user1680680 9 Июл 2014 в 21:02

2 ответа

Лучший ответ

Как заявил kdgregory, общий ответ заключается в том, что это невозможно. Такая циклическая зависимость обычно является признаком проблемы при проектировании структуры базы данных.

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

Но будьте осторожны , поскольку время сохранения B, идентификатор A будет известен, но, очевидно, A не будет присутствовать в базе данных.

0
Serge Ballesta 9 Июл 2014 в 17:50

У вас не будет доступа к идентификатору, пока после времени сброса вы не сможете добавить каскадную вставку / обновление в отношения, но это может привести вас в ад, особенно когда у вас есть циклическая зависимость. Я бы сделал то, что сказал @kdgregory, изменил структуру вашей таблицы.

0
botossi 9 Июл 2014 в 17:38