【问题标题】:Use 2 databases in the same query in Grails在 Grails 的同一查询中使用 2 个数据库
【发布时间】:2025-12-25 08:20:08
【问题描述】:

在我的 grails 应用程序中,我有一个 sql 查询,它根据另一个数据库中的列从一个数据库中选择列数据。 因此,它在 SAME 查询中与 2 个数据库进行交互。

有没有办法根据从另一个数据库检索的数据从一个数据库中挑选数据。 在这种情况下,你会如何放下代码。

想法?

【问题讨论】:

    标签: grails datasource


    【解决方案1】:

    找到了一条路。

    创建了 2 个域对象,Cdisc 和 Tape。 cdisc 和磁带是 2 个不同数据库中的 2 个表。两个表都有一个共同的主 ID,player_id。 想法是在一页上显示这两个表中的数据。

    Cdisc.groovy

    package tune  
    
    class Cdisc {  
    String name  
    double cId  
    String id  
    
    static mapping = {
        table 'cdisc'  
        version false       
    
        columns {  
            id column:'player_id'   
            cId column:'c_id'  
            name column: 'name'  
        }  
    }  
    }  
    

    Tape.groovy

    package tune
    
    class tape {
    
        String id   
    String tapeDate
    String comments 
    
    
    static mapping = {
        table 'tape'
        version false       
        columns {       
            id column:'player_id'       
             tapeDate column:'tape_date'
             comments column: 'comments'
    }
    
    }
    
    
    
    public def getName(){       
        def cdisc = Cdisc.findById(this.id)     
        return cdisc.name
    }
    
    }
    

    TapeController.groovy

    def list = {
        params.max = Math.min(params.max ? params.int('max') : 10, 100)
    
        [tapeInstanceList: tape.findAllByCommentsLike('%Test%'),     tapeInstanceTotal: Tape.count()]
    
    }
    

    最后使用 getter 从表 cdisc 中显示名称

    list.gsp

        <g:each in="${tapeInstanceList}" status="i"
            var="tapeInstance">
            <tr class="${(i % 2) == 0 ? 'odd' : 'even'}">
    
                <td><g:link action="edit" id="${tapeInstance.id}">
                    ${fieldValue(bean: tapeInstance, field: "id")}
                </g:link></td>
    
                <td>
                ${fieldValue(bean: tapeInstance, field: "tapeDate")}
                </td>
    
                <td>
                ${fieldValue(bean: tapeInstance, field: "comments")}
                </td>
    
                 <td>${tapeInstance.getName()}</td>
    
    
        </g:each>
    

    因此,我们使用 getter 从另一个数据库的第二个表中获取数据。 为我工作。让我知道是否有其他解决方法。

    【讨论】: