J'ai le @MappedSuperClass
(Exemple simplifié):
@MappedSuperclass
public abstract class MySuperClass {
@Id
@GeneratedValue
private long id;
@Column(nullable = false)
private Date creationDate;
// ...
}
et un concret Entity
(exemple simplifié):
@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;
// ...
}
Maintenant, j'ai besoin d'un index comprenant les colonnes MySuperClass.creationDate
, MyEntity.status
Et MyEntity.type
.
Si j'ajoute @Index(name = "IDX_MYINDEX")
à MySuperClass.creationDate
Hibernate ajoute un index de creationDate
à chaque entité héritée de MySuperClass
.
J'ai essayé @AttributeOverride
Mais il n'est pas compatible avec les index.
Des idées? TIA!
Si vous utilisez JPA 2.1
alors vous pouvez utiliser l'annotation de classe @Table
avec ses index d'attributs
@Table(indexes = { @Index(name = "IDX_MYIDX1", columnList = "id,name,surname") })
Veuillez noter que, comme le dit la documentation
Ils ne sont utilisés que si la génération de table est en vigueur. Par défaut, aucun index supplémentaire.
columnlist
, comme indiqué ci-dessus, accepte la liste des noms de colonne comme une liste séparée par des virgules.
Si vous n'utilisez pas JPA 2.1, vous pouvez simplement utiliser l'ancien Hibernate
s @Index
annotation (notez que cela est déjà obsolète). Il y a l'attribut columnNames
où vous pouvez passer un tableau de noms de colonnes quel que soit le champ au-dessus duquel il est déclaré.
@Index(name = "IDX_MYIDX1", columnNames = { "id", "name", "surname"})
Utilisez l'annotation @Index et utilisez le paramètre "columnList" pour définir les colonnes à utiliser pour créer votre index. Cette liste doit être constituée d'une liste de valeurs séparées par des virgules des noms de colonne.
Important: N'oubliez pas d'ajouter la propriété de nom de colonne (via l'annotation de colonne) à toutes les propriétés qui composent cet index, sinon vous obtiendrez une erreur lors du démarrage de votre conteneur.
@Table(name = "table_name",indexes = [Index(name = "name_of_index", columnList = "liste of fields separated by ',' ")])