Grails: с плагином источников данных возникают проблемы с подключением классов доменов к различным источникам данных - PullRequest
1 голос
/ 12 сентября 2011

Я использую подключаемые источники данных для Grails, описанные здесь: http://burtbeckwith.com/blog/?p=70

Я подключаюсь к 2 схемам баз данных MySQL на одном сервере: my_schema_1 и my_schema_2.Большая часть данных, которые мне нужны, поступает из my_schema_1, но одна из ее таблиц содержит столбец, который ссылается на одну из таблиц в my_schema_2.

Вот мои определения источника данных в моем файле Datasources.groovy (упрощенно):

datasources = {
    datasource(name: 'my_schema_1') {
        domainClasses([Question, Answer])
        driverClassName('com.mysql.jdbc.Driver')
        url('jdbc:mysql://test.myserver.com/my_schema_1')
        username('***')
        password('***')
    }

    datasource(name: 'my_schema_2') {
        domainClasses([Genre])
        driverClassName('com.mysql.jdbc.Driver')
        url('jdbc:mysql://test.myserver.com/my_schema_2')
        username('***')
        password('***')
    }
}

Вот мои 3 определения класса:

class Question {
    String text
    Answer answer
    Genre genre
}

class Answer {
    String text
}

class Genre {
    String name
}

Всякий раз, когда я пытаюсь выполнить запрос критерия для класса Вопроса, я получаю следующее исключение сопоставления:

An association from the table question refers to an unmapped class: Genre

Если я закомментирую свойство жанра в классе Question, все будет работать нормально.Если я выполняю запрос критерия для самого класса Genre, все работает нормально.Кажется, что существует проблема объединения двух классов в разных схемах.(Конечно, также возможно, что я что-то пропустил или сделал что-то неправильно.)

Я делаю что-то не так или это ограничение плагина источников данных?И, если это ограничение плагина, какие альтернативы я мог бы использовать для достижения того, что мне нужно?

Любая помощь / предложения приветствуются.

Спасибо,

BJ

Ответы [ 2 ]

3 голосов
/ 12 сентября 2011

Плагин источников данных поддерживает только слабые ссылки между базами данных.Это означает, что вам нужно самостоятельно управлять целостностью ассоциаций.Лучший способ сделать это - реализовать службу, которая способна запрашивать оба экземпляра домена и предоставлять вам экземпляр составного домена.

Ссылка, на которую вы ссылались, отмечает это в нижней части записи.Кроме того, вот такой же вопрос задан (и дан ответ) в списках рассылки grails.

1 голос
/ 21 сентября 2011

Я нашел более простое решение, поскольку базы данных находятся на одном сервере.

Я просто определяю один источник данных следующим образом (без указания базы данных):

datasources = {
    datasource(name: 'my_schemas') {
        domainClasses([Question, Answer, Genre])
        driverClassName('com.mysql.jdbc.Driver')
        url('jdbc:mysql://test.myserver.com')
        username('***')
        password('***')
    }
}

Затем я указываюбаза данных в разделах отображения классов моего домена:

class Question {
    String text
    Answer answer
    Genre genre

    static mapping = {
        table 'my_schema_1.question'
    }
}

class Answer {
    String text

    static mapping = {
        table 'my_schema_1.answer'
    }
}

class Genre {
    String name

    static mapping = {
        table 'my_schema_2.genre'
    }
}

Опять же, это работает только потому, что 2 базы данных находятся на одном сервере и используют одно и то же имя пользователя / пароль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...