Как я могу попросить Hibernate создать индекс по внешнему ключу (JoinColumn)? - PullRequest
2 голосов
/ 25 марта 2010

Это моя модель.

класс пользователя {

   @CollectionOfElements 
    @JoinTable(name = "user_type", joinColumns = @JoinColumn(name = "user_id"))
    @Column(name = "type", nullable = false)
  private List<String> types = new ArrayList<String>();

}

Вы можете вообразить, что будет таблица с именем "user_type", которая имеет два столбца, один - user_id, другой - type.

И когда я использую hbm2ddl для генерации ddls, я могу получить эту таблицу вместе с ограничением внешнего ключа для user_id. Однако для этого столбца нет индекса этого. И мне нужен этот индекс. Как я могу позволить Hibernate генерировать этот индекс для меня?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 25 марта 2010

Попробуйте аннотацию @Index.

@Index(name="user_type_index")

Существует также аннотация @IndexColumn, используемая с таблицами соединения, но, похоже, она не создает индекс, а контролирует, какое поле определяет порядок в семантике списка.

Столбец @Index в этом контексте создает индекс для таблицы соединений.

1 голос
/ 17 июля 2012

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

Hibernate Класс Dialect и все его подклассы, которые не переопределяют метод getAddForeignKeyConstraintString (Oracle, SQL Server и т. Д.), Не будут создавать индекс для внешнего ключа.

MySQLDialect переопределяет этот метод и добавляет индекс к каждому внешнему ключу

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