Используйте 2 базы данных в одном запросе в Grails - PullRequest
0 голосов
/ 12 ноября 2010

В моем приложении Grails у меня есть SQL-запрос, который выбирает данные столбца из 1 базы данных на основе столбца в другой базе данных. Таким образом, он взаимодействует с 2 базами данных в одном и том же запросе.

Есть ли способ выбрать данные из 1 базы данных на основе данных, извлеченных из другой базы данных. В таком случае, как бы вы записали код.

Мысли

1 Ответ

0 голосов
/ 07 декабря 2010

Найден способ.

Создано 2 объекта домена, Cdisc и Tape.cdisc и tape - это 2 таблицы в 2 разных базах данных.Обе таблицы имеют общий первичный идентификатор, player_id.Идея состоит в том, чтобы отображать данные из этих 2 таблиц на одной странице.

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()]

}

Окончательно отображаем имя из таблицы 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>

Таким образом, мы используем получатель для получения данных из второй таблицы в другой базе данных,Работал на меня.Дайте мне знать, если есть какие-либо другие обходные пути.

...