siemanko
#programowanie #java #spring #hibernate #orm

Mam obiekt, który chcę zapisać w bazie. Obiekt jako id ma inny obiekt (value object). Korzystam z adnotacji @EmbeddedId. Czy to poprawne?
Mam problem podczas generowania id. W adnotacji @GenericGenerator muszę przekazać generator id. Chciałbym aby był on taki jak ten domyślny, czyli automatycznie dodawał jeden do ostatniej wartości w bazie danych (auto increment). Jak to dobrze rozwiązać?

Albo inne podejście. Zamiast użyć @EmbeddedId, zmusić hibernate aby myślał żeby ten obiekt id jest prymitywem. Np. poprzez toString(). Da się tak?
1
  • Najlepsze
  • Wszystkie komentarze
S.....k
S.....k
@siemanko: > @GeneratedValue(strategy=GenerationType.AUTO)

Będzie autoinkrementować
0
k.....l
k.....l
Da się tak?


@siemanko: Da się, ale nie powinieneś tak robić. EmbeddedId jest ok.

Możesz wkleić kod?
0
k.....l
k.....l
@siemanko: Pokaż jeszcze UserId. I wrzuć na jakiegoś pastebina.

https://docs.jboss.org/hibernate/orm/3.5/reference/en/html/components.html ->

"You cannot use an IdentifierGenerator to generate composite keys. Instead the application must assign its own identifiers."
0
siemanko
User:
http://pastebin.com/PRuL295G

@kisi3l: UserId:
0
siemanko
@Szinek: niestety nie chce działać, rzuca: "org.hibernate.id.IdentifierGenerationException: null id generated for:class xxx.domain.user.User"
0
k.....l
k.....l
@siemanko: Composite Key to po prostu 'złożony klucz', czyli nie pojedyńcze pole z encji, a, jak w Twoim przypadku, cała klasa UserId.

Widzę problem z Twoim kodem - chcesz użyć generatora auto-increment, a Twoim kluczem jest String. Spróbuj utworzyć własny generator, coś jak:

http://blog.anorakgirl.co.uk/2009/01/custom-hibernate-sequence-generator-for-id-field/

Nie sugeruj się jednak moimi odpowiedziami za bardzo, moja wiedza nt. Hibernate'a jest szczątkowa, i mocno przestarzała (3.x) ;]
0
siemanko
@kisi3l: Ok, dzięki za pomoc. Właśnie obecnie używam własnego generatora i używam UUID, ale boję się o konflikty. To co podesłałeś jest chyba tym czego szukam, tylko nie wiem jak z wydajnością.
0
k.....l
k.....l
wydajnością


@siemanko: Nie przejmuj się wydajnością :)
0