Ich habe das @MappedSupperClass
(vereinfachtes Beispiel):
und eine konkrete Entity
(vereinfachtes Beispiel):
Jetzt brauche ich einen Index mit den Spalten MySuperClass.creationDate
, MyEntity.status
und MyEntity.type
.
Wenn ich @Index(name = "IDX_MYINDEX")
zu MySuperClass.creationDate
hinzufügen, fügt hibernate einen Index von creationDate
zu jeder von MySuperClass
geerbten Entität hinzu.
Ich habe versucht, @AttributeOverride
, aber es ist nicht für Indizes.
Irgendwelche Ideen? TIA!
Wenn Sie JPA 2.1
verwenden, können Sie die Klassenannotation @Table
mit ihren Attributindizes
Bitte beachten Sie, dass in der Dokumentation
stehtDiese werden nur verwendet, wenn die Tabellengenerierung wirksam ist. Standard auf Nein zusätzliche Indizes.
columnlist
, wie oben gezeigt, akzeptiert die Spaltennamenliste als durch Kommas getrennte Liste.
Wenn Sie JPA 2.1 nicht verwenden, können Sie einfach die alte Hibernate
s @Index
Annotation verwenden (beachten Sie, dass dies bereits veraltet ist). Es gibt das Attribut columnNames
, in dem Sie ein Array von Spaltennamen übergeben können, unabhängig davon, über welches Feld es deklariert ist.
Verwenden Sie @Index Annotation und verwenden Sie den Parameter "columnList", um festzulegen, welche Spalten verwendet werden sollen, um Ihren Index zu erstellen. Diese Liste sollte aus einer durch Kommas getrennten Liste von Werten der Spaltennamen bestehen.
Wichtig: Vergessen Sie nicht, die Eigenschaft "Spaltenname" (über die Annotation "Column") zu allen Eigenschaften hinzuzufügen, die diesen Index bilden, andernfalls erhalten Sie beim Starten Ihres Containers einen Fehler.