2011-09-27 6 views
2

J'ai une superclasse mappée avec deux propriétés déjà indexées. Maintenant, je veux créer un index de groupe sur les deux propriétés. jusqu'à présent, il a travaillé avec:Comment annoter un index sur une classe MappedSuperclass

@MappedSuperclass 
Class A { 
    @Index(name="pa") 
    int a; 
    @Index(name="pb") 
    int b; 
} 

Selon la documentation de mise en veille prolongée je pourrais annoter mon nouvel index avec @Table (annotation mise en veille prolongée). mais je ne sais pas quoi définir pour le paramètre applyTo requis.

Quelqu'un at-il déjà essayé avec succès?

Répondre

1

De Hibernate Documentation:

@Table (AppliesTo = "tableName", index = {@Index (name = "index1", columnNames = { "colonne1", "colonne2"})}) crée les index définis sur les colonnes de la table nomTable. Ceci peut être appliqué sur la table primaire ou n'importe quelle table secondaire.

Mise à jour:
Pour le @MappedSuperclass, vous pouvez essayer d'utiliser l'annotation @Tables

@Tables(value={@Table(appliesTo="table1", indexes={@Index(name="index1", columnNames={"column1", "column2"})}), 
       @Table(appliesTo="table2", indexes={@Index(name="index1", columnNames={"column1", "column2"})})}) 

Mais cela semble plutôt fastidieux. Notez que l'annotation @Index possède la propriété columnNames, qui vous permet de spécifier plusieurs colonnes. Cependant, je ne suis pas sûr que vous deviez dupliquer la définition d'index pour chaque champ.

+1

et quel nom de table des 12 classes héritantes est le bon? C'est une superclasse mappée, elle n'a pas de table. – Laures

Questions connexes