2015-11-17 1 views
2

В моем проекте гибернации добавить индексы, как так:JPA 2.1 Индекс аннотаций для столбцов с функцией

@Entity 
@Table(name="MY_TABLE", indexes = { 
    @Index(name = "idx_user_name", columnList = "name"), 
    @Index(name = "idx_user_email", columnList = "email") 
}) 

Который работает просто отлично, но что происходит, когда я хочу, чтобы сделать индекс, как это:

CREATE INDEX ON my_table (lower(name)); 

Если я использую следующую аннотацию я получаю AnnotationException:

@Index(name = "idx_lower_name", columnList = "lower(name)") 

Я хочу, чтобы отправить мой проект с индексами, сделанными через Hibernate + JPA 2.1. Можно ли применять функции через аннотацию Index?

Или мне нужно просто запустить SQL-скрипт при развертывании, чтобы самостоятельно добавить эти индексы через SQL?

Я мог бы просто форматировать columnList неправильно, или может быть поле, не описанное в документации, которую мне не хватает.

+0

Сгенерированный Javadoc будет _always_ показывать _all_ поля аннотации - даже те, у которых нет явного комментария JavaDoc. И вы попробовали '@Index (name =" idx_lower_name ", columnList =" lower (name) ")'? –

+0

@ tobias-liefke 'AnnotationException' является следствием использования' @Index (name = "idx_lower_name", columnList = "lower (name)") ' –

+0

Спасибо, я включил эту информацию в вопрос. –

ответ

5

Невозможно использовать индекс, основанный на функции, в JPA 2.1.

JPA предоставляет средства для абстрагирования от конкретной базы данных. Каждая база данных имеет собственную реализацию ФБР, которая может vary greatly. Следовательно, он не является частью стандарта.

Я заглянул в код Hibernate, чтобы узнать, может ли быть недокументированная функция для ФБР. К сожалению, только индексы на основе столбцов - supported.

Для создания индекса необходимо запустить SQL-скрипт при развертывании.

+0

Спасибо, вот что я думал и планировал сделать иначе. – rosenthal

Смежные вопросы