2013-09-25 3 views
3

В моем сценарии у меня есть сценарий генерации схемы для создания таблиц и требуемых индексов. Мне интересно, есть ли необходимость в определении аннотации @Index в судах спящего режима, если да, то почему?Hibernate: Когда использовать аннотацию @Index

Сценарий:

create table issues (id, project_id, .., status_id) 

create index idx_issues_projid on issues (project_id) 

Сущность:

@Table(name="issues") 
public class DBIssue { 

.. 
    @ManyToOne(fetch = FetchType.EAGER) 
    @JoinColumn(name = "PROJECT_ID") 
    @Index(name="INDEX_TFW_ISSUE_PROJECT_ID") 
    private DBProject project; 
} 

спящий режим конфигурации:

<property name="hibernate.hbm2ddl.auto">off</property>

ответ

5

Я предполагаю, что вы спрашиваете аннотацию Hibernate @Index, которая по сути была импортирована в JPA 2.1. Вы бы использовали @Index в любом месте, где вы в противном случае проактивно сообщали бы реляционной базе данных, чтобы индексировать столбец, прежде всего на поле, где вы знаете, что будете делать много поисков. В этом случае, например, вы, вероятно, захотите «часто выбирать DBIssue s, принадлежащие определенному DBProject, поэтому имеет смысл индексировать этот столбец в таблице, содержащей DBIssue.

+2

Я понимаю это, но если У меня уже есть индекс, созданный в базе данных по требуемым столбцам.Есть ли какая-либо выгода в настройке того же типа в спящем режиме? Если я опускаю эту аннотацию, есть ли недостаток? – harsh

+1

В этой аннотации сообщается, что Hibernate (или поставщик JPA 2.1) создает индекс, когда он генерируя схему. Нет необходимости включать ее в свой код, но это хорошая документация и гарантирует, что если вам когда-нибудь понадобится восстановить DDL, индекс будет автоматически подключен. – chrylis

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