2015-01-06 4 views
0

У меня есть два домена Favorite и Post и вы хотите добавить index в эти два домена. Ниже пути я донг это:Идентификатор одного и того же имени в двух разных доменах

class Favorite { 
    String name 
    static mapping = { 
     name column: 'name', index: 'name' 
    } 
} 

и

class Post { 
    String name 
    Integer nbrOfFavorites 
    static mapping = { 
     name column: 'name', index: 'name' 
    } 
} 

И при запуске приложения я получаю следующее сообщение об ошибке в консоли:

ERROR hbm2ddl.SchemaExport - HHH000389: Unsuccessful: create index name on post (name) 
ERROR hbm2ddl.SchemaExport - Index "NAME" already exists; SQL statement: create index name on post (name) [42111-176] 

Этот код успешно тару индекс для первого домена (Favorite), но не для второго домена (Post).

Я искал это и as per this post мы можем иметь одинаковое имя индекса для разных таблиц. Тогда почему я получаю эту ошибку?

Как создать индекс с тем же именем в разных доменах? версия

  • Grails: 2.3.9 (также попытались с v2.4.4)
  • База данных: H2

Ref # Database Indices

ответ

2

Вы ссылаетесь сообщение о MySQL, которая позволяет повторное использование имен индексов в разных таблицах, но H2 не означает, что имена должны быть уникальными во всех таблицах. Имя индекса не очень важно - вы почти никогда не обращаетесь к нему напрямую. Оптимизатор запросов использует их, чтобы сделать запрос более эффективным, но это всего лишь деталь реализации.

Я бы с префиксом имя индекса с именем таблицы:

name column: 'name', index: 'favorite_name' 

и

name column: 'name', index: 'post_name' 

и необязательно префиксов или суффиксов, чтобы сделать это очевидным, что это индекс, например,

name column: 'name', index: 'idx_favorite_name' 

и

name column: 'name', index: 'idx_post_name' 
+0

Спасибо за разъяснение. – user1690588

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