Was und wann ist das beste Szenario, um die DiscriminatorValue-Annotation in Hibernate zu verwenden?Wann verwenden Sie die DiscriminatorValue-Annotation im Ruhezustand?
Antwort
Diese 2 Links mir helfen, das Vererbungskonzept zu verstehen die meisten:
http://docs.oracle.com/javaee/6/tutorial/doc/bnbqn.html
http://www.javaworld.com/javaworld/jw-01-2008/jw-01-jpa1.html?page=6
Scheider Um zu verstehen, müssen Sie zuerst die Vererbungsstrategien verstehen: SINGLE_TABLE, JOINED, TABLE_PER_CLASS.
Diskriminator wird häufig in SINGLE_TABLE-Vererbung verwendet, weil Sie eine Spalte benötigen, um den Typ des Datensatzes zu identifizieren.
Beispiel: Sie haben eine Klasse Student und 2 Unterklassen: GoodStudent und BadStudent. Sowohl die Good- als auch die BadStudent-Daten werden in einer Tabelle gespeichert, aber natürlich müssen wir den Typ kennen und das ist der Zeitpunkt, an dem DiscriminatorColumn ankommt. Siehe die oben angegebenen Links.
Wenn Sie eine Entitätsvererbung unter Verwendung der Eintabellenstrategie haben und der Wert der Diskriminatorspalte etwas anderes als der Name der Klasse der konkreten Klasse des Elements sein soll oder wenn der Typ der Diskriminatorspalte ist nicht STRING.
Dies wird mit einem Beispiel in the javadoc erklärt.
ist die Erklärung und ein Beispiel auf Hibernate Tabelle pro Klassenhierarchie, betrachten wir Basisklasse namens Payment und 2 abgeleitete Klassen wie Creditcard haben, prüfen
Wenn wir die abgeleitete Klasse Objekt wie Creditcard oder Scheck speichern dann automatisch Das Objekt der Zahlungsklasse wird ebenfalls in der Datenbank gespeichert, und in der Datenbank werden alle Daten nur in einer einzelnen Tabelle gespeichert, was sicher eine Basisklassentabelle ist.
Hier müssen wir eine zusätzliche Diskriminatorspalte in der Datenbank verwenden, nur um zu identifizieren, welches abgeleitete Klassenobjekt in der Tabelle zusammen mit dem Basisklassenobjekt gespeichert wurde. Wenn wir diese Spalte nicht verwenden, wird die Ausnahme
ausgelöstLassen Sie mich Ihnen ein Beispiel erklären. Angenommen, Sie haben eine Klasse namens Animal und unter Animal class gibt es viele Unterklassen wie Reptile, Bird ... etc.
Und in der Datenbank, die Sie Tabelle namens
---------------------------
ID||NAME ||TYPE ||
---------------------------
1 ||Crocodile ||REPTILE ||
---------------------------
2 ||Dinosaur ||REPTILE ||
---------------------------
3 ||Lizard ||REPTILE ||
---------------------------
4 ||Owl ||BIRD ||
---------------------------
5 ||parrot ||BIRD ||
---------------------------
Hier wird die Spalte TYPE
genannt wird DiscriminatorColumn ANIMAL
haben, da diese Spalt Daten enthalten, die Reptilien und Vögel klar trennt. Und die Daten REPTILE
und BIRD
in Spalte TYPE
sind der DiscriminatorValue.
So in der Java-Teil würde diese Struktur wie folgt aussehen:
Tierklasse:
@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;
}
Reptil Klasse:
@Entity
@DiscriminatorValue("REPTILE")
public class Reptile extends Animal {
}
Vogelklasse:
@Entity
@DiscriminatorValue("BIRD")
public class Bird extends Animal {
}
- 1. Wann verwenden Sie @Version und @Audited im Ruhezustand?
- 2. Können wir Union im Ruhezustand verwenden?
- 3. Wann verwenden Sie die Abhängigkeitsinjektion?
- 4. Wann verwenden Sie die Klammererweiterung?
- 5. Verwenden Sie Join und Unterabfrage mit Kriterien im Ruhezustand
- 6. Wann verwenden Sie Tabellencluster?
- 7. Mapping EnumSet im Ruhezustand
- 8. Bedingte saveOrUpdate im Ruhezustand
- 9. So führen Sie Datumsoperationen im Ruhezustand durch
- 10. Bypass GeneratedValue im Ruhezustand
- 11. MessageHub - Datenverschlüsselung im Ruhezustand
- 12. Zeilenebenensperre im Ruhezustand
- 13. Optimistische Sperre im Ruhezustand standardmäßig
- 14. Wann sollten Sie standardmäßige HTML-Tags/-Inputs verwenden und wann sollten Sie die asp.net-Steuerelemente verwenden?
- 15. Wann ModelAndView vs Model im Frühjahr verwenden?
- 16. Erstellen Sequenz-ID im Ruhezustand
- 17. Wann preRenderView im Vergleich zu viewAction verwenden?
- 18. Wann verwenden Sie eine Schnittstelle über einen Typalias im Fluss?
- 19. Warum Enum verwenden, um Typentabelle im Ruhezustand zu mappen?
- 20. Wann sollten Sie Page.DataBind() im Vergleich zu Control.DataBind() verwenden?
- 21. Wann würden Sie XamlServices.Transform() verwenden?
- 22. Wann verwenden Sie in swift?
- 23. Wann würden Sie PendingIntent verwenden?
- 24. Wann verwenden Sie private Methoden?
- 25. Ruhezustand
- 26. Laden von Entitäten im Ruhezustand
- 27. Verwenden von SQL-Spaltennamen im Ruhezustand createSQlquery-Ergebnis
- 28. Wann werden wir im Frühjahr ApplicationContext.xml verwenden?
- 29. SetMaxResults() funktioniert nicht im Ruhezustand
- 30. IN Betrieb im Ruhezustand Kriterien
Sie haben versuchte, die Dokumentation durchzugehen, ca n siehe http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/#d0e1168 & http://docs.jboss.org/hibernate/orm/3.3/reference/en-US/html /inheritance.html#inheritance-tablepersubclass-discriminator –