2010-09-20 2 views
4

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

ответ

2

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

+1

Просто интересно узнать, согласно вашему предыдущему предложению мы используем аннотации для спящего режима для этой цели. Имеет смысл поддержать это, когда JPA уже поддерживает однострочную аннотацию индекса. Просто мои 2 цента – user339108

+0

@ user339108 Я лично согласен, и я бы хотел, чтобы JPA тоже поддерживала это. Возможно, в будущей версии. –

+0

@ user339108 Можете ли вы привести пример своего заявления «JPA уже поддерживает однострочную аннотацию индекса столбца». Я не мог найти никакой аннотации, разрешающей эту другую, а затем аннотацию @Index, предоставленную Hibernate. – jaxvy

2

Да, это возможно с помощью 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/but-what-if-im-not-querying-by-id.html

3

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

@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

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

@Entity 
@Table([email protected](columnNames={"product_id","store_id"})) 
class MyEntity { 
    @Column(name="product_id") 
    private String productId; 

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

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