So erstellen Sie einen Index mit JPA / Hibernate und verwenden Felder von mappedsupperclass zusammen mit Feldern aus konkreten Entitäten

8

Ich habe das @MappedSupperClass (vereinfachtes Beispiel):

%Vor%

und eine konkrete Entity (vereinfachtes Beispiel):

%Vor%

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!

    
t777 24.07.2014, 20:32
quelle

2 Antworten

20

Wenn Sie JPA 2.1 verwenden, können Sie die Klassenannotation @Table mit ihren Attributindizes

verwenden %Vor%

Bitte beachten Sie, dass in der Dokumentation

steht
  

Diese 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.

%Vor%     
Maciej Dobrowolski 29.07.2014, 13:09
quelle
2

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.

    
dontForgetTheJoker 05.12.2016 10:50
quelle

Tags und Links