【问题标题】:Domain class mapping: datasource not working域类映射:数据源不工作
【发布时间】:2015-02-03 09:49:12
【问题描述】:

我有以下域类需要映射到特定的数据源(oracle),而我的所有其他域类都映射到默认数据源(mysql,完美运行)。

我的编辑器是 GGTS,您可以注意到映射中的“数据源”带有下划线,好像它不是映射中的有效属性:

我还构建了一个简单的控制器:

class AccountWfmController {
    def index() {
        render AccountWfm.list() as JSON
    }
}

在尝试调用控制器方法index 时,出现以下异常:

java.lang.IllegalStateException

类 [mypackage.AccountWfm] 上的方法在外部使用 Grails 应用程序。如果在使用测试的上下文中运行 正确模拟 API 或引导 Grails。

最后,我的数据源(注意:在我的/lib 文件夹中我有ojdbc6.jar):

dataSourceWFM {
    pooled = true
    dialect = org.hibernate.dialect.Oracle10gDialect
    driverClassName = 'oracle.jdbc.OracleDriver'
    username = "username"
    password = "password"
    url = "jdbc:oracle:thin:@192.168.1.1:1521:SID"
    dbCreate = '' //none, I have readonly access
}

关于这里发生的事情的任何提示(Grails 2.4.3)?

谢谢

【问题讨论】:

    标签: oracle grails grails-orm ggts


    【解决方案1】:

    查看Multiple datasources 上的 Grails 文档。密切注意数据源的名称是如何得出的。您会注意到,由于 Grails 是基于约定的,因此命名约定是:dataSource_extraNameHere,而您的 mapping 将使用 extraNameHere

    所以对于你的例子:

    dataSource_wfm {
        pooled = true
        dialect = org.hibernate.dialect.Oracle10gDialect
        driverClassName = 'oracle.jdbc.OracleDriver'
        username = "username"
        password = "password"
        url = "jdbc:oracle:thin:@192.168.1.1:1521:SID"
        dbCreate = '' //none, I have readonly access
    }
    

    在您的域类中,您的映射应该是这样的:

    static mapping = {
      datasource = 'wfm'
    }
    

    希望这有助于阐明 Grails 中多个数据源的功能。该文档也是一个很好的信息来源。

    【讨论】:

    • 感谢 Joshua 的回答。这个问题确实与命名约定“datasource_extraName”有关,我在阅读有关多个来源的文档时确实错过了它。
    • 不客气。我很高兴这只是一个疏忽。学习 Grails 有很多东西需要学习,但我们从错误中学习。我之所以记得这一点,是因为当 Grails 中添加了多数据源支持时,我感到非常兴奋。
    猜你喜欢
    • 2013-01-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-24
    • 2015-12-11
    • 2013-09-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多