Как создать индексы по нескольким столбцам - PullRequest
2 голосов
/ 16 сентября 2010

У нас есть следующие отношения сущностей, когда Пользователь принадлежит к определенной Организации.Мои запросы выглядят как «выберите * из пользователя, где org =: org» или «выберите * из пользователя, где org =: org и type =: type»

У меня есть отдельные индексы для класса User.Первый запрос будет в порядке из-за индексации элемента внешнего ключа.Требует ли второй запрос многостолбцового индекса для столбцов org и type?Если это так, как я должен аннотировать, чтобы создать один такой индекс.

@Entity 
class User {
...

@ManyToOne 
@ForeignKey
@Index
Organization org;

@Index
Type type;    
...
}

Ответы [ 3 ]

1 голос
/ 16 сентября 2010

Это можно сделать, используя специфическую для Hibernate аннотацию @Table.Из документации:

2.4.1 Сущность

...

@Table(appliesTo="tableName", indexes = { @Index( name="index1", columnNames={"column1", "column2"} ) } ) создает определенные индексы для столбцов таблицыtableName.Это может быть применено к основной таблице или любой дополнительной таблице.Аннотация @Tables позволяет применять индексы для разных таблиц.Эта аннотация ожидается, когда @javax.persistence.Table или @javax.persistence.SecondaryTable(s).

Reference

0 голосов
/ 31 января 2018

Как вы можете прочитать в JSR-000338 Java Persistence 2.1 Предложенный окончательный проект спецификации :

11.1.23 Аннотация индекса

Аннотация Index используется при создании схемы.Обратите внимание, что указывать индекс для первичного ключа необязательно, поскольку индекс первичного ключа будет создан автоматически, однако аннотацию индекса можно использовать для указания порядка расположения столбцов в индексе для первичного ключа.

@Target({}) @Retention(RUNTIME)
public @interface Index {
  String name() default "";
  String columnList();
  boolean unique() default false;
}

Синтаксис элемента columnList представляет собой column_list следующим образом:

column::= index_column [,index_column]*
index_column::= column_name [ASC | DESC]

Поставщик персистентности должен соблюдать указанный порядок столбцов.

Если ASC или DESC не указано, предполагается ASC (в порядке возрастания).

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

@Table(indexes = {
        @Index(columnList = "org,type"),
        @Index(columnList = "another_column")})
0 голосов
/ 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

Кажется, что синтаксис такой же или очень похож на Hibernate.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...