Potrzebuję odwzorować wyliczenia, które wcześniej nie implementowały interfejsu do istniejącej bazy danych, która przechowuje wyliczenia w tej samej tabeli, co klasa właściciela przy użyciu @Enumerated(EnumType.STRING)
.Mapowanie wyliczanie hibernacji
class A {
HasName name;
}
interface HasName {
String getName();
}
enum X implements HasName {
John, Mary;
public String getName() { return this.name(); }
}
enum Y implements HasName {
Tom, Ann;
public String getName() { return this.name(); }
}
Jak w takim przypadku należy wykonać mapowanie? Utrzymywanie bazy danych nie zmienia się, ponieważ wszystkie enumy implementujące interfejs będą miały różne wartości, ale nie jestem pewien, w jaki sposób obiekty powinny być pobierane z DB (czy potrzebuję niestandardowego programu odwzorowującego, który spróbuje utworzyć instancję enum przy użyciu określonych klas wyliczeniowych? Czy Hibernate natywnie obsługuje tę funkcję?).
W moim przypadku nie wiem, co będzie klasa wyliczenia. Podczas tworzenia 'A', Hibernate będzie musiał wybrać jedną z wymień {X, Y}. – dm3
Nie powinno być trudno dopasować przykładową implementację UserType do twoich potrzeb. Na przykład, zamiast zapisywania tylko wartości, możesz również przechowywać klasę (np. Com.example.X.John lub X.John, ale będziesz potrzebować mapowania z X na com.example.X) – sfussenegger
Znaczy I Potrzebujemy niestandardowego programu odwzorowującego (nie widziałem twojego linku do pastebin). Dziękuję za odpowiedź. – dm3