Mam kilka adnotacji Hibernate/JPA (nadal nie wiem różnicy, aby być szczerym), które pozwalają mi utworzyć klasę asocjacyjną. Ta klasa łączy dwa elementy powiązane z jednym obiektem. Pierwotnie używałem @JoinTable
, ale zdałem sobie sprawę, że potrzebuję dużo więcej metadanych ze skojarzeniami, więc musiałem przekonwertować kod na inny typ obiektu.Hibernate @ManyToOne Referencje klasy przy użyciu @NaturalId zamiast @Id
Na razie używam @Id
zaznaczyć kolumnę ID
dla moich przedmiotów, a przy użyciu @NaturalId (mutable = false)
dla String uuid
.
Moja klasa asocjacji używa @ManyToOne
i tworzy tabelę dobrze, ale gdy się jej przyglądam, tabela używa pola @Id
jako kolumny odwzorowania. Wolałbym, aby ta klasa asocjacji korzystała z @NaturalId uuid
, aby ułatwić przenoszenie relacji/skojarzeń do innych systemów.
Jak mogę uzyskać poprawność identyfikatora?
Dla porównania, mój wygląd kodu Java DB i tak:
AssociationsTable
----------------------------------------------
| ID | META DATA | ID ASSOC. 1 | ID ASSOC. 2 |
----------------------------------------------
| 1 | stuff | 1 | 2 |
----------------------------------------------
Objects
------------------------------
| ID | META DATA | UUID |
------------------------------
| 1 | stuff | FOO-123 |
------------------------------
| 2 | stuff | BAR-456 |
------------------------------
Association Class{
ObjA main;
ObjA sub;
@ManyToOne
getMain()
@ManyToOne
getSub()
}
ObjA Class{
Long id;
@Id
@GeneratedValue(generator="increment")
@GenericGenerator(name="increment", strategy = "increment")
@XmlElement
@Column(name = "ID", unique = true, nullable = false)
getId()
String uuid;
@NaturalId (mutable = false)
@GeneratedValue(generator = "uuid")
@GenericGenerator(name = "uuid", strategy = "uuid2")
@Column(name = "uuid", unique = true)
getUUID()
}
Zdaję sobie sprawę z [twojego poprzedniego pytania] (http://stackoverflow.com/q/31926396/835000). Postanowiłem więc wyjaśnić: dlaczego martwisz się połączeniem tabel? Mam na myśli podmioty na poziomie bazy danych mogą być połączone z '@ Id', następnie mogą być serializowane z resetowanymi wartościami kluczy, następnie przesyłane do innych instancji, przekształcane do postaci szeregowej ze wszystkimi relacjami na poziomie Java-bean, a następnie przepuszczane w nowej bazie danych z nowymi wartościami dla Właściwości '@ Id' ... Klucze podstawowe dla jednostek będą różne, ale nadal będziesz je otrzymywać za pomocą pola' @ NaturalId'. Czy coś pominąłem? .. – svaor