在Grails / Gorm中索引外键

时间:2014-01-20 12:45:33

标签: hibernate grails gorm

使用Grails / Gorm,我可以通过执行以下操作来定义索引:

class Person {
    String firstName
    static mapping = {
        table 'people'
        id column: 'person_id'
        firstName column: 'First_Name', index: 'Name_Idx'
    }
}

但是,如果我使用连接表,如:

class Employee {
    static hasMany = [projects: Project]

    static mapping = {
        projects joinTable: [name: 'EMP_PROJ',
                             column: 'PROJECT_ID',
                             key: 'EMPLOYEE_ID']
    }
}

如何配置连接表中的列?

由于

2 个答案:

答案 0 :(得分:2)

如果您使用的是database migration plugin,则可以使用createIndex更改集创建索引:

changeSet(author: "..", id: "..") {
  createIndex(indexName: "indexname", tableName: "yourtable", unique: "true") {
    column(name: "country_code")
  }
}

答案 1 :(得分:1)

似乎Grails中没有任何DSL可以这样做。但是,您始终可以在hibernate configuration中为这些连接表设置索引。以下是所述配置文件的示例。

<?xml version='1.0' encoding='UTF-8'?> 

<!DOCTYPE hibernate-mapping PUBLIC 
   '-//Hibernate/Hibernate Mapping DTD 3.0//EN' 
   'http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd'> 

<hibernate-mapping> 
   <database-object> 
      <create>CREATE INDEX foo_idx ON bar (some_id, other_column)</create> 
      <drop/> 
      <dialect-scope name='org.hibernate.dialect.MySQL5InnoDBDialect' /> 
   </database-object> 
</hibernate-mapping>