两个不同域中的同名索引

时间:2015-01-06 07:30:10

标签: database grails indexing

我有两个域FavoritePost,并希望在这两个域上添加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]

此代码成功为第一个域(收藏夹)创建了索引索引,但没有为第二个域(Post)成功。

我搜索了这个,as per this post我们可以为不同的表提供相同的索引名称。 那我为什么会收到此错误?

如何在不同的域中创建同名索引?

  • Grails版本:2.3.9(也尝试使用v2.4.4)
  • 数据库:H2

参考#Database Indices

1 个答案:

答案 0 :(得分: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'