两个不同域中的同名索引

Index of same name in two different domains

我有两个域 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 我们可以为不同的表使用相同的索引名称。 那为什么我会收到这个错误?

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

参考#Database Indices

您正在引用一个关于 MySQL 的 post,它允许在不同的 table 中重复使用索引名称,但 H2 不允许 - 名称必须在所有 [=26] 中是唯一的=]秒。索引名称不是很重要——您几乎从不直接引用它。查询优化器使用它们来提高查询效率,但这只是一个实现细节。

我会在索引名称前加上 table 名称:

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'