Co i kiedy najlepiej używać adnotacji DiscriminatorValue w stanie hibernacji?Kiedy używać adnotacji DiscriminatorValue w hibernacji
Odpowiedz
Te 2 linki mi pomóc najbardziej zrozumieć pojęcie dziedziczenia:
http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html
http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?page=6
Aby zrozumieć dyskryminator, najpierw trzeba zrozumieć strategie dziedziczenia: SINGLE_TABLE dołączył, TABLE_PER_CLASS.
Dyskryminator jest powszechnie stosowany w dziedziczeniu SINGLE_TABLE, ponieważ do identyfikacji typu rekordu niezbędna jest kolumna.
Przykład: Masz klasę Student i dwie podklasy: GoodStudent i BadStudent. Zarówno dane Good, jak i BadStudent będą przechowywane w 1 tabeli, ale oczywiście musimy znać typ i właśnie wtedy pojawi się DiscriminatorColumn. Zobacz linki zamieszczone powyżej.
Po dziedziczeniu encji za pomocą strategii pojedynczej tabeli i chcesz, aby wartość kolumny dyskryminatora była inna niż nazwa klasy konkretnej klasy jednostki lub gdy typ kolumny dyskryminatora jest nie STRING.
Zostało to wyjaśnione, na przykład, w the javadoc.
Oto wyjaśnienie i jeden przykład na stole hibernacji za klasowej hierarchii, należy rozważyć mamy klasy bazowej o nazwie Płatności i 2 klasy pochodne, takie jak karta kredytowa, Sprawdź
Gdybyśmy zapisać pochodzący klasy obiekt jak karta kredytowa lub Sprawdź następnie automatycznie Obiekt klasy płatności zostanie również zapisany w bazie danych, a w bazie danych wszystkie dane będą przechowywane tylko w jednej tabeli, co z pewnością jest tabelą bazową.
Ale tutaj musimy użyć jednej dodatkowej kolumny dyskryminacyjnej w bazie danych, aby zidentyfikować, który obiekt klasy pochodnej został zapisany w tabeli wraz z obiektem klasy bazowej, jeśli nie używamy tej kolumny, hibernacja rzuci wyjątek
Pozwól, że wyjaśnię ci przykład. Załóżmy, że masz klasę o nazwie Animal i pod klasą Animal istnieje wiele podklas takich jak Reptile, Bird ... itd.
A w bazie masz tabela nazywa ANIMAL
---------------------------
ID||NAME ||TYPE ||
---------------------------
1 ||Crocodile ||REPTILE ||
---------------------------
2 ||Dinosaur ||REPTILE ||
---------------------------
3 ||Lizard ||REPTILE ||
---------------------------
4 ||Owl ||BIRD ||
---------------------------
5 ||parrot ||BIRD ||
---------------------------
Tutaj kolumna TYPE
nazywa DiscriminatorColumn, bo ta kolumna zawiera dane, które wyraźnie oddziela gadów i ptaków. A dane REPTILE
i w kolumnie są wartością DiscriminatorValue.
Tak więc w ramach java ta struktura będzie wyglądać następująco:
Animal klasa:
@Getter
@Setter
@Table(name = "ANIMAL")
@Entity
@Inheritance(strategy = InheritanceType.SINGLE_TABLE)
@DiscriminatorColumn(discriminatorType = DiscriminatorType.STRING, name = "TYPE")
public class Animal {
@Id
@Column(name = "ID")
private String id;
@Column(name = "NAME")
private String name;
}
klasa Reptile: Klasa
@Entity
@DiscriminatorValue("REPTILE")
public class Reptile extends Animal {
}
Ptak:
@Entity
@DiscriminatorValue("BIRD")
public class Bird extends Animal {
}
- 1. Dziedziczenie adnotacji w hibernacji?
- 2. kiedy używać haseł w trybie hibernacji?
- 3. Czego brakuje mi przy używaniu adnotacji hibernacji?
- 4. Pole tekstowe przy użyciu hibernacji adnotacji
- 5. Uruchamianie generowania adnotacji narzędzia hibernacji bez atrybutu "katalog"
- 6. Kiedy używać viewDidLoad i kiedy używać awakeFromNib
- 7. Kiedy używać node.js i kiedy używać ajax?
- 8. kiedy używać zadania i kiedy używać wątku?
- 9. Kiedy używać dup i kiedy używać klonu w Ruby?
- 10. Jak mapować "Mapę" w trybie hibernacji za pomocą adnotacji?
- 11. @UniqueConstraint i @Column (unikatowy = true) w hibernacji adnotacji
- 12. Kiedy używać Dagger w aplikacji na Androida?
- 13. Potwierdzić numer telefonu komórkowego za pomocą hibernacji adnotacji
- 14. Kiedy używać interfejsów w PHP
- 15. Kiedy używać asObservable() w rxjs?
- 16. Kiedy używać OPTIMIZE w mysql
- 17. kiedy używać hijack w golangu?
- 18. Kiedy używać "tego" w Javie
- 19. Kiedy używać Threadpool w Gevent
- 20. Kiedy używać „ja” w Ruby
- 21. kiedy używać void * w C++
- 22. Kiedy używać assert() w Matlabie?
- 23. Kiedy używać parlist w R?
- 24. Kiedy używać Formatera wartości i kiedy używać Resolvera wartości
- 25. Kiedy używać Requirejs i kiedy używać dołączonego javascript?
- 26. Kiedy należy używać JCR i kiedy należy używać JPA/RDBMS?
- 27. Kiedy używać klienta boto3 i kiedy używać zasobu Boto3?
- 28. Kiedy używać komponentów Seaside i kiedy używać prostych obiektów renderowania?
- 29. Kiedy używać algorytmów genetycznych a kiedy używać sieci neuronowych?
- 30. Konwencja dotycząca celu C: kiedy używać i kiedy używać z
Mają cię próbował przejrzeć dokumentację, ca n referuj http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e1168 i http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html /inheritance.html#inheritance-tablepersubclass-discriminator –