有人可以解释如何在Grails中定义多列索引吗?文档是最好的。Grails多列索引
例如,这似乎并没有在所有的工作: http://grails.org/GORM+Index+definitions
我有一些运气这一点,但结果似乎随机最好。适用于另一个域类的定义不适用于另一个域(当然,名称不同)。 http://www.grails.org/doc/1.1/guide/single.html#5.5.2.6%20Database%20Indices
一些工作实例和解释将不胜感激!
有人可以解释如何在Grails中定义多列索引吗?文档是最好的。Grails多列索引
例如,这似乎并没有在所有的工作: http://grails.org/GORM+Index+definitions
我有一些运气这一点,但结果似乎随机最好。适用于另一个域类的定义不适用于另一个域(当然,名称不同)。 http://www.grails.org/doc/1.1/guide/single.html#5.5.2.6%20Database%20Indices
一些工作实例和解释将不胜感激!
已经为我工作了多列索引的解决方案是:
class ClassName {
String name
String description
String state
static mapping = {
name index: 'name_idx'
description index: 'name_idx'
state index: 'name_idx'
}
}
这将创建一个名为“name_idx”与索引三列的索引。
缺点:列按字母顺序排列在索引中,而不是它们输入的顺序。
AFAIK,index
闭包显示为here从未实现过,所以这些例子应该被忽略(这个页面用于讨论可能的实现,而不是记录实际的实现)。
正确的方法来定义一个单列索引name_idx
为name
属性
static mapping = {
name index:'name_idx'
}
很抱歉,但我不知道如何定义一个多列索引,请尝试Grails mailing list如果你不这里没有答案。万一不能在域类中直接声明多列索引,您可以在SQL文件中定义它们,如果它们不存在(或删除并重新创建它们),则该文件会创建它们。这个SQL文件可以由init
关闭在Bootstrap.groovy
执行,以使您的索引多列,列出与逗号分隔符(注意,逗号后没有空间,列避免this bug。你点命中的第二个网址该bug,因为它说:
index:'Name_Idx, Address_Index'
与空间;它应该工作作为
index:'Name_Idx,Address_Index'
您指向了一个建议改变的第一个URL(我不相信这是当前实现,并有没有ide它的可能性有多大)。
我需要能够控制多列索引中列的顺序并使其唯一。我通过在使用直接SQL的Bootstrap中创建索引来解决GORM/Hibernate的限制:
class BootStrap {
DataSource dataSource
def init = { servletContext ->
if (!MyModel.count()) { // new database
createIndexes()
...
}
}
private void createIndexes() {
Sql sql = new Sql(dataSource)
sql.execute("create unique index my_index on my_model(col1,col2);")
}
这可能会更适合[DB迁移](http://grails.org/plugin/database-migration)插件而不是引导程序。 – cdeszaq 2012-12-10 14:50:38
我试过了(来自参考文献)以各种运气。它似乎非常随机地工作。对一张桌子起作用的东西在另一张桌子上给出另一个结果。 什么是索引名称的约定?是否需要为另一列定义“Address_Index” - 或者Grails是否奇迹般地发现它必须是“地址”字段的索引? – Kimble 2009-10-11 11:44:38
@Kimble,我并不认为命名中有任何魔术(尽管无可否认文档和实现足够混乱,我不能确定)。 – 2009-10-11 16:19:01