Аннотации @Index не разрешены для этого местоположения

При попытке использовать аннотацию @Index от javax.persistence Eclipse дает мне эту ошибку.

Я использую его непосредственно перед полем java.util.Date внутри класса, аннотированного с помощью @Entity.

Раньше я использовал org.hibernate.annotations.Index в том же месте, и все было нормально.

Проблема началась после того, как я обновил hibernate-core с 4.1.9.Final до 4.3.0.Beta3 и hibernate-commons-annotations от 4.0.1 до 4.0.2. Он говорит, что @Index устарел и рекомендует javax.persistence один.

Все документы и примеры, которые я нашел, помещают @Index перед членами класса. Что мне не хватает?

Ответ 1

Аннотации индекса JPA могут использоваться только как часть другой аннотации, такой как @Table, @SecondaryTable и т.д. (см. раздел "Смотрите также" в Javadoc):

@Table(indexes = { @Index(...) })

Ответ 2

Если вы используете Eclipselink, вы можете добавить этот импорт в свой класс:

import org.eclipse.persistence.annotations.Index;

Затем добавьте @Index в ваше поле:

public class FooClass {
   @Index
   int field1;
}

или

@Index(columnNames = {"field1", "field2"})
public class FooClass {       
   int field1;
   int field2;
}