/ / Jak wiedzieć, który identyfikator będzie generowany przez hibernację (zależność cykliczna) - java, hibernacja, generator, zależność cykliczna

Jak sprawdzić, który identyfikator będzie generowany przez hibernację (zależność Circular) - java, hibernacja, generator, zależność kołowa

Utworzyłem Obiekt A {id: long (AutIncrement), name: String}, który zapiszęOrupdate z hibernacją.

Chcę wiedzieć przed uratowaniem A, co będziebyć wygenerowanym Id. Potrzebuję tego, ponieważ muszę ustawić właściwości w A, które zależą od właściwości obiektu B, ale mam również właściwości w B w zależności od obiektu A.

To rodzaj kołowej zależności. Podczas wypełniania B potrzebuję identyfikatora A, podczas wypełniania A potrzebuję jednej wygenerowanej właściwości B.

Czy istnieje sposób, aby wiedzieć przed zapisaniem A, który będzie miał jego identyfikator.

Z góry dziękuję rgd

Odpowiedzi:

0 dla odpowiedzi № 1

Jak stwierdził kdgregory, ogólna odpowiedź jest taka, że ​​nie jest to możliwe. Ten rodzaj zależności cyklicznej jest generalnie oznaką problemu związanego z projektowaniem struktury bazy danych.

Biorąc to pod uwagę, jeśli naprawdę chcesz to zrobić, możesz ręcznie zadeklaruj sekwencję w bazie danych, powiedz hibernacji, że strategia generowania klucza podstawowego to assigned (wystarczy nie dołączać żadnego generatora). Następnie w swojej aplikacji, podczas tworzenia nowego A, najpierw uzyskujesz jego identyfikator z sekwencji, umieszczasz go w sprzeciwie, robisz to, czego potrzebujesz z obiektami zależnymi od niego, a na koniec go utrwalasz.

Ale strzec się, jako czas utrzymywania się B, identyfikator A będzie znany, ale oczywiście żaden A nie będzie obecny w bazie danych.


0 dla odpowiedzi nr 2

Nie będziesz mieć dostępu do identyfikatora, dopóki nieczas spłukiwania, Możesz dodać kaskadową wstawkę / aktualizację do relacji, ale może to doprowadzić cię do piekła, szczególnie gdy masz zależność cykliczną. Zrobiłbym to, co powiedział @kdgregory, zmień strukturę tabeli.