Hibernate предоставляет механизм для определения индексов нескольких столбцов через Table. Есть ли способ указать это ОРМ агностик моды с помощью JPA или JPA2 (например, с помощью javax.persistence. * API)Есть ли аннотация для определения индекса нескольких столбцов в jpa2
ответ
Нет, намекнул в my answer к вашему previous question, нет никакого стандартизированного способа, вы должны используйте для этого расширения поставщика (если они существуют).
Да, это возможно с помощью 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
Просто произошло тот же вопрос, используя 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. Я проверил назад, и индекс был успешно создан по обоим столбцам.
В 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
должно быть название столбцов в БД, а не имя атрибута.
Просто интересно узнать, согласно вашему предыдущему предложению мы используем аннотации для спящего режима для этой цели. Имеет смысл поддержать это, когда JPA уже поддерживает однострочную аннотацию индекса. Просто мои 2 цента – user339108
@ user339108 Я лично согласен, и я бы хотел, чтобы JPA тоже поддерживала это. Возможно, в будущей версии. –
@ user339108 Можете ли вы привести пример своего заявления «JPA уже поддерживает однострочную аннотацию индекса столбца». Я не мог найти никакой аннотации, разрешающей эту другую, а затем аннотацию @Index, предоставленную Hibernate. – jaxvy