Hibernate: Créer un index
Je veux créer plusieurs Index dans ma DB. Malheureusement, nous devons modifier le fournisseur de persistance de EclipseLink mise en veille prolongée, mais pas non plus la solution avec javax.la persistance.Indice ni la solution avec mise en veille prolongée fonctionne.
C'est ce que la classe ressemble à:
@Entity
@Table(name = "my_shop")
public class Shop extends BaseEntity {
@Temporal(TemporalType.TIMESTAMP)
@Column(nullable = false)
private Calendar lastUpdate;
}
Ce devrait être la solution avec javax.la persistance.*:
import javax.persistence.Index;
import javax.persistence.Table;
@Table(name = "my_shop",
indexes = @Index(columnList = "lastupdate")
)
Hibernate annotations sont obsolètes, donc il doit y avoir une raison de ne pas utiliser ces annotations:
import org.hibernate.annotations.Index; //deprecated
import org.hibernate.annotations.Table;
@Table(...,
indexes = @Index(columnNames = "lastupdate")
)
- Je utiliser Glassfish 3.1.2.2, PostgreSQL 9.1, JPA 2.1 et hibernate-core 4.3.4.Final. Si je regarde dans la base de données, il n'y a pas d'index créé sur le domaine spécifique via psql "\d+".
Ce que mon persistence.xml ressemble:
...
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
...
Seulement EclipseLink pouvez gérer cela facilement:
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;
}
J'ai testé les solutions proposées comme avec toutes les combinaisons "lastupdate", "lastUpdate" et d'autres "nom" attributs dans la Colonne @et @Index, mais rien ne semble fonctionner.
Espère que quelqu'un pourra m'aider,
cheers!
Mise à jour de 1
Réservoir à vous pour votre aide!
En effet, cette solution fonctionne:
@javax.persistence.Table(name = "my_shop")
@Table(appliesTo = "my_shop"
,indexes = {@Index(columnNames = "name", name = "name"),
@Index(columnNames = "lastupdate", name = "lastupdate")}
)
Mais encore org.hibernate.annotations.Index;
est marqué comme obsolète. Ainsi en est-il de bonne pratique de l'utiliser ou pas? Si non quelle est l'alternative car apparemment javax.persistence.Index
ne fonctionne pas.
org.hibernate.annotations.Index;
fonctionne avec toutes les valeurs: créer, mettre à jour, ...
javax.persistence.Index
n'est pas question que la valeur "mise en veille prolongée.hbm2ddl.auto" a ne fonctionne pas.
source d'informationauteur Rooky
Vous devez vous connecter pour publier un commentaire.
J'utilise JPA 2.1 avec Hibernate 4.3 et PostgreSQL 9.3. Je n'ai pas de problèmes avec les index de
Bien que ma config a
Et c'est mon entité cartographie
PS. En fait, j'ai quelques problèmes avec les annotations. Je ne peut pas spécifier l'espace de l'indice et des doit créer indecies pour les sous-classes de la classe parente pour SINGLE_TABLE hiérarchie.
Avec
Hibernate
vous devez entrer lename
attribut dans la@Index
annotation.Avec
EclipseLink
n'est pas nécessaire, il crée lename
automatiquement.La
@Index
annotation ne fonctionne qu'avechibernate.hbm2ddl.auto=create-drop
voir ce l'entrée en Hibernation forums.Juste un mot de prudence, c'est que cette option supprime la table, mais en général
hibernate.hbm2ddl.auto
est destinée à des fins de développement uniquement.Pour résumer:
javax.persistence.Index
(voir La JSR-000338p. 450, élément 11.1.23)org.mise en veille prolongée.les annotations.Index