【问题标题】:What is the proper way to allow a table name to be changed via configuration in grails/gorm允许通过 grails/gorm 中的配置更改表名的正确方法是什么
【发布时间】:2013-03-06 04:44:27
【问题描述】:

我目前有以下代码来定义我的“用户”类

class User
{
  String username

  static mapping = {
    table ConfigurationHolder.config.console.datasource.table.user.mapping ?: 'user'
  }
}

这适用于 grails 1.3.5,但升级到 2.2.1 后,grails 不断抱怨 ConfigurationHolder 已被弃用。

所以从技术上讲,它“仍然”可以正常工作,但是一旦他们删除了这个类,将会发生什么。文档说“改用依赖注入”。但是我不能使用依赖注入,因为mapping 是静态的。

真正的问题是允许通过配置重命名表的“正确”方式是什么?

谢谢 颜

【问题讨论】:

  • 它看起来像重复,但真正的问题更多是关于如何通过配置正确重命名表。似乎提供您自己的NamingStrategy 应该可以解决问题...关键是如何在其中注入配置...
  • 我找到了这张旧的 Jira 票。也许它有效。 jira.grails.org/browse/GRAILS-3680
  • 啊,我以为他们在那个问题中涵盖了静态范围。

标签: grails grails-orm


【解决方案1】:

您可以使用grails.util.Holders 类来访问配置:

class User
{
    String username

    static mapping = {
      table Holders.config.console?.datasource?.table?.user?.mapping ?: 'user'
    }
}

【讨论】:

  • 我确认此解决方案有效。我只是想知道为什么 grails 不推荐使用 ConfigurationHolder(同时指定使用依赖注入)并提供另一种使用不同“持有人”模式访问它的方法......
【解决方案2】:

applicationContext 作为第一个参数传递给映射闭包。

详见http://jira.grails.org/browse/GRAILS-8087和源代码:https://github.com/grails/grails-core/blob/2.2.x/grails-hibernate/src/main/groovy/org/codehaus/groovy/grails/orm/hibernate/cfg/HibernateMappingBuilder.groovy#L61

示例用法:

class User
{
    String username

    static mapping = { ctx ->
      table ctx.grailsApplication.config.console?.datasource?.table?.user?.mapping ?: 'user'
    }
}

【讨论】:

  • 此解决方案不起作用:2013/03/25 15:11:30.934 错误 [GrailsContextLoader] 初始化应用程序时出错:评估域的 ORM 映射块时出错 [org.linkedin.glu.console.domain .User]:没有这样的属性:grailsApplication 类:org.springframework.web.context.support.XmlWebApplicationContext
  • yan,你用的是什么 Grails 版本?
  • 我正在使用撰写本文时的最新版本 (2.2.1)
【解决方案3】:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    • 1970-01-01
    相关资源
    最近更新 更多