我有两个域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]
此代码成功为第一个域(收藏夹)创建了索引索引,但没有为第二个域(Post)成功。
我搜索了这个,as per this post我们可以为不同的表提供相同的索引名称。 那我为什么会收到此错误?
如何在不同的域中创建同名索引?
答案 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'