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
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verwende ich JPA 2.1 mit Hibernate 4.3 und PostgreSQL 9.3. Ich habe keine Probleme mit Indizes
Obwohl meine config hat
Und das ist meine entity mapping
PS. In der Tat, ich habe einige Probleme mit, Anmerkungen. Ich kann nicht angeben, tablespace für index und erstellen müssen indecies für Unterklassen in der übergeordneten Klasse für SINGLE_TABLE-Hierarchie.
aktualisiert meine Antwort zu zeigen, dass ich alles, was die Arbeit mit JPA
Funktioniert für mich! (nur nicht wusste, dass eindeutige Felder indiziert sind standardmäßig...)
InformationsquelleAutor danbst
Mit
Hibernate
müssen Sie diename
Attribut in der@Index
annotation.Mit
EclipseLink
ist nicht erforderlich, schafft es diename
automatisch.InformationsquelleAutor Douglas Nassif Roma Junior
Den
@Index
Anmerkung funktioniert nur mithibernate.hbm2ddl.auto=create-drop
finden Sie in diesem Eintrag in der Hibernate-Foren.Nur ein Wort der Vorsicht ist, dass diese option löscht die Tabellen, aber im Allgemeinen
hibernate.hbm2ddl.auto
gemeint ist nur für Entwicklungszwecke.aktualisierte Antwort mit einer Warnung, vielen Dank
Danke, ich aktualisierte meine Frage.
Ich sehe eine andere offizielle statements: hibernate.atlassian.net/browse/HHH-1012 Anfrage zu propagieren index mit
hibernate.hbm2ddl.auto=update
gelöst 3.2.x, 3.3.x, 3.5.0-Beta-2InformationsquelleAutor Angular University
Zusammenfassend:
javax.persistence.Index
(siehe JSR-000338, p. 450, Artikel-11.1.23)org.hibernate.Anmerkungen.Index
InformationsquelleAutor naXa