Указание индекса (неуникальный ключ) с использованием JPA

Как вы определяете поле, например email как имеющее индекс с использованием аннотаций JPA. Нам нужен неуникальный ключ в электронном письме , потому что в этом поле буквально миллионы запросов в день, а без ключа это немного медленнее.

@Entity
@Table(name="person", 
       uniqueConstraints=@UniqueConstraint(columnNames={"code", "uid"}))
public class Person {
    // Unique on code and uid
    public String code;
    public String uid;

    public String username;
    public String name;
    public String email;
}

Я видел аннотацию, относящуюся к спящему режиму, но я стараюсь избегать решений конкретных поставщиков, поскольку мы все еще выбираем между спящим режимом и ядром данных.

ОБНОВЛЕНИЕ:

Начиная с JPA 2.1, вы можете это сделать. См .: Аннотация @Index не разрешена для этого местоположения

87
задан Community 23 May 2017 в 11:54
поделиться

3 ответа

Насколько мне известно, не существует способа указания индексов между JPA-провайдерами. Однако вы всегда можете создать их вручную прямо в базе данных, большинство баз данных будут получать их автоматически во время планирования запроса.

4
ответ дан 24 November 2019 в 07:39
поделиться

Это невозможно сделать с помощью аннотации JPA. И в этом есть смысл: там, где UniqueConstraint четко определяет бизнес-правила, индекс - это просто способ сделать поиск быстрее. Так что этим должен заниматься DBA.

0
ответ дан 24 November 2019 в 07:39
поделиться

Я бы действительно хотел иметь возможность указывать индексы базы данных стандартизованным способом, но, к сожалению, это не является частью спецификации JPA (возможно, потому, что поддержка генерации DDL не требуется спецификацией JPA, которая своего рода преграда для такой функции).

Таким образом, вам придется полагаться на расширение конкретного поставщика для этого. Hibernate, OpenJPA и EclipseLink явно предлагают такое расширение. Я не могу подтвердить для DataNucleus, но поскольку определение индексов является частью JDO, я думаю, что это так.

Я действительно надеюсь, что поддержка индексов будет стандартизирована в следующих версиях спецификации и, таким образом, как-то не согласуется с другими ответами, я не вижу веских причин не включать такую ​​вещь в JPA (тем более, что база данных не всегда находится под ваш контроль) для оптимальной поддержки генерации DDL.

Кстати, предлагаю скачать спецификацию JPA 2.0.

5
ответ дан 24 November 2019 в 07:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: