Grails多个数据源,在尝试将新实例保存到选定数据源时无法正常工作

时间:2016-03-16 13:56:28

标签: grails gorm grails-domain-class

我在处理多个数据源时遇到了这个简单配置的问题而且我试图将新实例保存到特定数据源

我的数据源:

dataSources:
    dataSource:
        pooled: true
        jmxExport: true
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        driverClassName: com.mysql.jdbc.Driver
        username: root
        password: Choice2016
    dominio1:
        pooled: true
        jmxExport: true
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        driverClassName: com.mysql.jdbc.Driver
        username: root
        password: Choice2016
    dominio2:
        pooled: true
        jmxExport: true
        dialect: org.hibernate.dialect.MySQL5InnoDBDialect
        driverClassName: com.mysql.jdbc.Driver
        username: root
        password: Choice2016

我的域名

class Nxtt_reports {

    Boolean favorite

    static hasMany = [nxtt_report_histories: Nxtt_report_history, nxtt_user_reports: Nxtt_user_reports, nxtt_report_snapshots: Nxtt_report_snapshot]

    static constraints = {

    }

    static mapping = {
        datasource 'ALL'
    }

}

当我这样做时,

    def nxtt = Nxtt_reports.class
    println(nxtt.dominio1.list())

我可以在我想要的域中列出数据,但如果我这样做

    def nxtt = Nxtt_reports.class.newInstance()
    nxtt.favorite = 0
    nxtt.dominio2.save()

我得到了这个

没有这样的属性:dominio2 for class:nexttreport.server.Nxtt_reports。 Stacktrace如下: groovy.lang.MissingPropertyException:没有这样的属性:dominio2 for class:nexttreport.server.Nxtt_reports

使用:

| Grails版本:3.1.1 | Groovy版本:2.4.5 | JVM版本:1.8.0_65

修改

environments:
    development:
        dataSources:
            dataSource:
                dbCreate: update
                url: jdbc:mysql://192.168.1.24:3306/nexttreport?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
            dominio1:
                dbCreate: update
                url: jdbc:mysql://192.168.1.24:3306/dominio1?useUnicode=yes&characterEncoding=UTF-8&useSSL=false
            dominio2:
                dbCreate: update
                url: jdbc:mysql://192.168.1.24:3306/dominio2?useUnicode=yes&characterEncoding=UTF-8&useSSL=false

1 个答案:

答案 0 :(得分:0)

我在阅读和理解您的代码时遇到了一些麻烦,因为您没有遵循正常的Java / Groovy约定。

首先,我建议您使用普通的CamelCase,不要在类名中使用下划线,因此请使用NxxtReports

其次,为什么不NxxtReports.domino1.list()list()NxxtReports上的静态方法,因此请将其称为。<​​/ p>

第三,我认为最重要的是,使用普通的Java / Groovy实例化Object的方式,所以

def nxxt = new NxxtReport()
nxxt.favorite = 0
nxxt.domino2.save()

我怀疑通过调用newInstance()变量上的class,未正确添加DomainClass实例上的额外Grails方法。

我手边没有真正的计算机(现在在移动设备上)所以我无法检查我的代码,但我认为使用普通的Java / Groovy约定会有很多帮助。