启动工程时，为什么没有自动创建或更新数据库表结构?
李小翔
2014-03-20 14:49

内容列表

    启动工程时，默认情况下，grails会自动创建或更新数据库表结构，如果发生没有（或仅有部分）自动创建的情况，可以依次检查以下配置。
DataSource配置中，dbCreate没有配置，只有为 create、create-drop、update的一种时，启动时才会触发数据库 schema update
如果是开发环境的 run-app，并且安装了插件 BroToolkit，则可以检查一下 Config.groovy 中是否启用了 bropen.toolkit.datasource.schema.smartupdate，如果启用了的话，可以尝试删除文件 target/domainClasses.hash 再试
（4.0.3已废弃该配置，但是默认启用了其他方式，可以尝试删除系统临时文件夹里的 “工程名_domains.cache” 文件。）
如果数据库是Oracle，可以检查 DataSource 中配置的用户是不是有 EXP_FULL_DATABASE 或者 IMP_FULL_DATABASE 的权限，并且是否有其他表空间的库表结构和当前应用的库表结构是一样的。（有多个表空间的开发环境很容易发生这种问题）
这种情况下，如果是未安装插件 BroToolkit 的工程，可以收回该用户的上述两个权限。
如果安装了 BroToolkit 插件，则可以在 DataSource 中配置对应的schema，配置示例如下：
hibernate { 
    properties { 
        oracle.schame = ”bropen”                 // 配置表空间
        oracle.nls_sort = ”SCHINESE_PINYIN_M”    // 按中文拼音排序
    } 
    properties_auditlog {                         // 审计日志
        oracle.schame = ”broalog”
   } 
} 
......
dataSource { 
    configClass = bropen.toolkit.orm.HibernateConfiguration
    username = ”bropen”
   ......
} 
dataSource_auditlog { 
    configClass = bropen.toolkit.orm.HibernateConfiguration
    username = ”broalog”
   ......
}