So erstellen Sie einen index mit JPA/hibernate und der Verwendung von Feldern aus MappedSuperClass zusammen mit Bereichen aus Beton Person
Habe ich die @MappedSuperClass
(Vereinfachtes Beispiel):
@MappedSuperclass
public abstract class MySuperClass {
@Id
@GeneratedValue
private long id;
@Column(nullable = false)
private Date creationDate;
//...
}
und eine konkrete Entity
(Vereinfachtes Beispiel):
@Entity
public class MyEntity extends MySuperClass {
@Index(name = "IDX_MYINDEX")
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private MyType type;
@Index(name = "IDX_MYINDEX")
@Column(nullable = false)
@Enumerated(EnumType.STRING)
private MyResult status;
//...
}
Nun brauche ich einen index, einschließlich der Spalten MySuperClass.creationDate
, MyEntity.status
und MyEntity.type
.
Wenn ich @Index(name = "IDX_MYINDEX")
zu MySuperClass.creationDate
hibernate fügt einen index von creationDate
zu jeder Einheit geerbt von MySuperClass
.
Versuchte ich @AttributeOverride
aber es ist nicht in der Lage für Indizes.
Irgendwelche Ideen? TIA!
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie
JPA 2.1
dann können Sie mit der Klasse die annotation@Table
mit seinem Attribut IndizesBitte beachten Sie, dass die Dokumentation sagt
columnlist
, wie oben gezeigt, nimmt Spaltennamen-Liste als Komma-separierte Liste.Wenn Sie nicht verwenden, JPA 2.1, können Sie einfach alte
Hibernate
s@Index
annotation (Hinweis: dies ist bereits veraltet). Es gibt AttributcolumnNames
wo Sie können: array von Spaltennamen, egal über welches Feld es deklariert ist.Verwenden von @ - Index annotation und verwenden Sie den parameter "columnList", um festzulegen, welche Spalten sollen verwendet werden, um Ihren index. Diese Liste sollte eine durch Kommas getrennte Liste der Werte der Spalte Namen.
Wichtig: vergessen Sie nicht, fügen Sie die Spalte name-Eigenschaft (über die Column-annotation), um alle Eigenschaften dieser index, andernfalls erhalten Sie eine Fehlermeldung, wenn die Inbetriebnahme des container.
@Column(length=..)
annotation.