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», не работает.