Hibernate: Создать индекс

Я хочу создать несколько индексов в моей БД. К сожалению, нам нужно сменить поставщика постоянства с EclipseLink на Hibernate, но ни решение с javax.persistence.Index, ни решение с Hibernate не работает.

Вот как выглядит класс:

@Entity
@Table(name = "my_shop")
public class Shop extends BaseEntity {

    @Temporal(TemporalType.TIMESTAMP)
    @Column(nullable = false)
    private Calendar lastUpdate;
}

Это должно быть решение с javax.persistence. *:

import javax.persistence.Index;
import javax.persistence.Table;

@Table(name = "my_shop",
        indexes = @Index(columnList = "lastupdate")
)

Аннотации Hibernate устарели, поэтому должна быть причина не использовать эти аннотации:

import org.hibernate.annotations.Index; // deprecated
import org.hibernate.annotations.Table;

@Table(...,
        indexes = @Index(columnNames = "lastupdate")
)

Я использую Glassfish 3.1.2.2, PostgreSQL 9.1, JPA 2.1 и hibernate-core 4.3.4.Final. Если я посмотрю в базе данных, нет никаких индексов, созданных для конкретного поля через psql "\ d +".

Вот как выглядит мой файл persistence.xml:

...
    <property name="hibernate.hbm2ddl.auto" value="create"/>
    <property name="dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>
...

Только EclipseLink может справиться с этим легко:

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;
}

Я протестировал данные решения со всеми комбинациями «lastupdate», «lastUpdate» и дополнительными атрибутами «name» в @Column и @Index, но, похоже, ничего не работает.

Надеюсь, что кто-то может мне помочь, ура!

Обновление 1

Спасибо за помощь! Действительно, это решение работает:

@javax.persistence.Table(name = "my_shop")
@Table(appliesTo = "my_shop"
        ,indexes = {@Index(columnNames = "name", name = "name"),
                @Index(columnNames = "lastupdate", name = "lastupdate")}
)

Но до сих порorg.hibernate.annotations.Index; помечен как устаревший Так это хорошая практика или нет? Если нет, то какова альтернатива, потому что, по-видимомуjavax.persistence.Index не работает

org.hibernate.annotations.Index; работает с каждым значением: создать, обновить, ...javax.persistence.Index не имеет значения, какое значение имеет «hibernate.hbm2ddl.auto», не работает.

Ответы на вопрос(4)

Ваш ответ на вопрос