Hibernate: Create Index

Erstellen Sie mehrere Indizes in meine DB. Leider haben wir die Umstellung der Persistenz-provider EclipseLink, Hibernate, aber noch die Lösung mit javax.die Persistenz.Index weder die Lösung mit dem Ruhezustand funktioniert.

Dies ist, was die Klasse sieht wie folgt aus:

@Entity
@Table(name = "my_shop")
public class Shop extends BaseEntity {

    @Temporal(TemporalType.TIMESTAMP)
    @Column(nullable = false)
    private Calendar lastUpdate;
}

Dies sollte die Lösung sein, mit javax.Beharrlichkeit.*:

import javax.persistence.Index;
import javax.persistence.Table;

@Table(name = "my_shop",
        indexes = @Index(columnList = "lastupdate")
)

Den Hibernate annotations sind veraltet, es muss also einen Grund, nicht zu verwenden, diese Anmerkungen:

import org.hibernate.annotations.Index; //deprecated
import org.hibernate.annotations.Table;

@Table(...,
        indexes = @Index(columnNames = "lastupdate")
)

Ich verwende Glassfish 3.1.2.2, PostgreSQL 9.1, JPA 2.1 und hibernate-core 4.3.4.Endgültig. Wenn ich in der Datenbank, es gibt keine Indizes erstellt, die auf dem spezifischen Gebiet via psql mit "\d+".

Das, was meine persistence.xml sieht aus wie:

...
    <property name="hibernate.hbm2ddl.auto" value="create"/>
    <property name="dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
...

Nur EclipseLink kann dies leicht zu handhaben:

import org.eclipse.persistence.annotations.Index;

@Entity
@Table(name = "my_shop")
public class Shop extends BaseEntity {

    @Index
    @Temporal(TemporalType.TIMESTAMP)
    @Column(nullable = false)
    private Calendar lastUpdate;
}

Getestet habe ich die angegebenen Lösungen mit allen Kombinationen "lastupdate", "lastUpdate" und zusätzlich "name" - Attribute in der Spalte @und @Index, aber nichts scheint zu funktionieren.

Hoffe, dass mir jemand helfen kann,
prost!

Update 1

Tank dir für deine Hilfe!
In der Tat ist diese Lösung funktioniert:

@javax.persistence.Table(name = "my_shop")
@Table(appliesTo = "my_shop"
        ,indexes = {@Index(columnNames = "name", name = "name"),
                @Index(columnNames = "lastupdate", name = "lastupdate")}
)

Aber noch org.hibernate.annotations.Index; ist als veraltet markiert. So ist es gute Praxis, es zu benutzen oder nicht? Wenn nicht, was ist die alternative, weil scheinbar javax.persistence.Index funktioniert nicht.

org.hibernate.annotations.Index; funktioniert mit jedem Wert: erstellen, aktualisieren, ...
javax.persistence.Index egal, welchen Wert "hibernate.hbm2ddl.auto" hat, funktioniert nicht.

InformationsquelleAutor Rooky | 2014-04-02

Schreibe einen Kommentar