Есть ли аннотация для определения индекса нескольких столбцов в jpa2 - PullRequest
4 голосов
/ 20 сентября 2010

Hibernate предоставляет механизм для определения многостолбцовых индексов с помощью таблицы . Есть ли способ указать, что это независимый от ORM способ через JPA или JPA2 (например, с использованием javax.persistence. * API)

Ответы [ 4 ]

5 голосов
/ 27 марта 2015

Только что возникла та же проблема с использованием Hibernate 4.3.8 с интеграцией JPA 2.1.Кажется, ответ Мяггарда правильный.Однако данный пример использования выглядит следующим образом:

@Index(name="EMP_NAME_INDEX", columnList={"F_NAME", "L_NAME"})

Я не знаю, работало ли это когда-либо.Я знаю, что в моем случае с JPA 2.1 значение columnList - это не массив, а строка.Поэтому для меня желаемый двухколонный индекс может быть определен следующим образом:

@Index(name="EMP_NAME_INDEX", columnList="F_NAME,L_NAME")

То есть просто используйте запятую для разделения имен столбцов в одной строке.У меня это работало с использованием СУБД Postgres.Я проверил, и индекс был успешно создан по обоим столбцам.

2 голосов
/ 24 августа 2015

Можно объявить многостолбцовый индекс в JPA 2.1. Вот пример Entity класса, который демонстрирует многостолбцовую индексацию.

@Entity
@Table(uniqueConstraints=@UniqueConstraint(columnNames={"product_id","store_id"}))
class MyEntity {
    @Column(name="product_id")
    private String productId;

    @Column(name="store_id")
    private Long storeId;
}

Обратите внимание, что columnNames должно быть именемстолбцы в БД, а не имя атрибута.

2 голосов
/ 29 апреля 2013

Да, возможно использование JPA 2.1, как показано в спецификации здесь:

http://download.oracle.com/otndocs/jcp/persistence-2_1-pfd-spec/index.html

на стр. 445 говорится, что

Индексаннотация используется при генерации схемы

columnList (обязательно) Имена столбцов, которые должны быть включены в индекс.

Пример использования можно увидеть здесь:

http://java -persistence-performance.blogspot.co.uk / 2013/03 / бут-что-если-им-не-выполнение запроса-на-id.html

2 голосов
/ 20 сентября 2010

Нет, как подсказывалось в моем ответе на ваш предыдущий вопрос , стандартного способа не существует, для этого нужно использовать расширения поставщика (если они существуют).

...