在Grails中的同一查询中使用2个数据库

时间:2010-11-12 14:09:08

标签: grails datasource

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

是否有办法根据从另一个数据库重新获取的数据从1个数据库中选择数据。 在这样的场景中,你将如何放下代码。

思想?

1 个答案:

答案 0 :(得分:0)

找到了解决方法。

创建了2个域对象,Cdisc和Tape。 cdisc和tape是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从另一个数据库的第二个表中获取数据。 为我工作。如果有任何其他解决方法,请告诉我。