Ich frage mich, ob es möglich ist, verschiedene Tabellen zu erstellen, die alle unter PK fallen? Mein Fall ist, dass ich ungefähr 15 verschiedene Arten von Produkten habe. Jede Bestellung kann mehrere Produkte enthalten (notiert in der Many-to-many-Tabelle, in der wir die PK der Bestellung mit der Produkt-PK verbinden, und die dritte Spalte gibt die Menge und die vierte Spalte den Preis an). Ist es jetzt möglich, eine Tabellenstruktur zu erstellen, in der jede Produktkategorie ihre eigene Tabelle hat, aber alle unter eine PK in einer Viele-zu-Viele-Tabelle fallen?Kann eine Vererbung unter einer ID erstellt werden?
Antwort
Sicher. Schau dir die JPA inheritance docs an. Es klingt so, als ob Sie entweder eine Unterklassenstrategie oder eine Tabellenhierarchie-Strategie wünschen.
Vereinfachtes Beispiel:
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
@DiscriminatorColumn(name="DISC")
public abstract class SuperClass{
// your common fields including primary key
@Id
private Long myKey;
// ...
}
@Entity
@DiscriminatorValue("FOO")
public class Foo extends SuperClass {
// Foo fields. Can be empty, depending on use case
}
@Entity
@DiscriminatorValue("BAR")
public class Bar extends SuperClass {
// Bar fields
}
@Entity
public class MyRelationshipClass {
@EmbeddedId
private MyKey key;
@ManyToOne
@JoinColumn(name="order_key")
private MyOrder order;
@ManyToOne
@JoinColumn(name="fooBarKey")
private SuperClass fooBar;
// other fields omitted
}
@Embeddable
public class MyKey {
@Column(name="order_key")
private Long order;
@Column(name="fooBarKey")
private Long fooBarKey;
}
In diesem Fall werden Sie mit einem Tisch für Oberklasse mit einer myKey Spalte, eine DISC-Säule, und was auch immer andere gemeinsam genutzte Spalten definieren Sie am Ende. Sie erhalten auch eine Foo- und Bar-Tabelle mit einer myKey-Spalte und den Spalten, die sie in der Unterklasse definieren. Ihre MyRelationshipClass hat eine Tabelle mit einer Spalte für den MyOrder-Schlüssel (die Klasse wurde im Beispiel weggelassen), eine Spalte für den Foo/Bar-myKey und alle anderen von Ihnen definierten Spalten. Sie können die Spalte "Diskriminator" weglassen, wenn Sie dies bevorzugen.
Wenn Sie Foo und Bar in der gleichen Tabelle wie SuperClass wollen, wechseln Sie zu IneheritanceType.SINGLE_TABLE
und ansonsten bleibt das Beispiel gleich. Sie müssen in diesem Fall den Diskriminator enthalten. Die Verwendung von JOINED
kann Auswirkungen auf die Leistung bei großen Volume-Tabellen oder eine umfangreiche Vererbungszuordnung haben, bietet jedoch eine logischere Trennung der Daten.
Hinweis: Einige JPA-Anbieter (z. B. Ruhezustand) können Sie die Beziehung Zuordnung in der EmbeddedId.
nicht alle definieren, so müssen Sie die Beziehung außerhalb der EmbeddedId
wie oben definiert.
HTH
- 1. Kann Yi unter Windows erstellt werden?
- 2. Vererbung unter der Haube
- 3. Kann eine Referenzklasse zu Protokollaufrufen erstellt werden
- 4. Wie erstellt man eine IDENTITY-Primärschlüsselspalte mit Vererbung pro Klasse?
- 5. SQL-Vererbung, erhalten durch ID
- 6. Kann Caffe mit MinGW unter Windows erstellt werden?
- 7. Wie kann ich eine Variable aus einer ID machen, die erstellt wird, nachdem der Artikel mit der ID erstellt wurde?
- 8. Wie kann eine Klasse für die Vererbung geschützt werden?
- 9. Wie kann Vererbung in C# implementiert werden?
- 10. Tabelle kann nicht erstellt werden
- 11. kann nicht die ID dynamisch erstellt div
- 12. Generieren einer Hardware-ID unter Windows
- 13. Datenbankverbindung kann nicht erstellt werden
- 14. Polymorphismus und Vererbung mit Klassenreferenz? unter
- 15. Audiokomprimierungsfilter kann nicht erstellt werden
- 16. Wie kann XML unter Verwendung einer Bedingung analysiert werden?
- 17. Warum kann Union nicht in Vererbung verwendet werden?
- 18. Benutzer kann nicht erstellt werden
- 19. Kann eine native GUI mit Python erstellt werden
- 20. Wie kann der folgende Code mithilfe von Vorlage oder Vererbung erstellt werden?
- 21. Unter welchen Bedingungen wird eine JSESSIONID erstellt?
- 22. Kann eine Seitennavigationsleiste mit Materialize CSS nicht erstellt werden?
- 23. Kann eine für Windows geschriebene Desktopanwendung unter Linux ausgeführt werden?
- 24. Vererbung in einer Verbundstruktur
- 25. Kann eine Python-Liste erstellt und gefälscht werden?
- 26. JPA Vererbung Forderungen ID in Unterklasse
- 27. Vererbung einer gepatchten Klasse
- 28. Warum die ToString() -Methode überschrieben werden kann, ohne dass eine Vererbung an C# beteiligt ist?
- 29. Kann in SSRS 2008 eine Zeile erstellt werden, die alle Spalten einer Matrix umfasst?