Настраиваемая таблица соединений в grails

У меня есть следующие домены

  1. Пользователь (в базе данных называется usermanagement) и
  2. Аккаунт (в другой базе данных xyz)

Это старая система, поэтому я не могу изменить архитектуру системы. Мне поручили внедрить систему, в которой определенные пользователи могут получить доступ только к определенным учетным записям. Это классический случай отношения «многие ко многим», но проблема заключается в том, что эти два домена находятся в двух разных базах данных. Я погуглил, возможно ли это, но понял, что это невозможно. Итак, теперь я думаю о создании настраиваемой таблицы соединений для хранения информации о том, какие пользователи имеют доступ к каким учетным записям. В таблице может быть два столбца accountId и userId. Итак, для этого мне нужно создать новый домен в grails или есть какой-нибудь более точный способ сделать это? Заранее спасибо.


person Eddard Stark    schedule 05.05.2012    source источник


Ответы (3)


Если вы создаете joinTable, в какой БД вы собираетесь его создать, и как вы собираетесь обрабатывать обновления в основных (учетных записях, пользователях) таблицах и сохранять свою таблицу соединений up2date?

Я думаю (в этом случае) вам не нужна таблица соединений, вам нужно обрабатывать бизнес-логику на уровне приложения.

У вас может быть 2 класса домена, каждый из которых указывает на другой источник данных (базу данных).

http://grails.org/doc/latest/guide/conf.html#multipleDatasources

person Aram Arabyan    schedule 05.05.2012
comment
да, у меня есть два доменных класса, указывающих на два разных источника. Таблица пользователей находится в управлении пользователями, а учетная запись находится в базе данных xyz. Управление пользователями - это обычная база данных, ее также используют другие приложения, поэтому я не могу ее трогать. xyz - это моя база данных, поэтому я могу поместить в нее таблицу соединений. Мне нужно регулировать доступ для пользователей - person Eddard Stark; 06.05.2012

Пока я искал решение этой проблемы, я не нашел никаких устойчивых решений. В конце концов я сузил возможные решения до двух: 1. Создайте таблицу домена (только), используя sql, своего рода патч, и используйте жестко запрограммированные запросы в grails для записи и доступа к данным в таблицу и из нее. 2. Создайте класс домена, например AccountUser, со свойствами clientId и userId.

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

person Eddard Stark    schedule 07.05.2012

Если базы данных «видимы» друг для друга (на одном сервере или между ними есть ссылка на базу данных), вы должны иметь возможность сопоставить классы домена, используя полные имена таблиц ('schema.tablename') в сопоставлении. закрытие.

псевдокод:

class User {

static mapping = {
    table "usermanagement.user"
}

static hasMany = [Account:accounts]

}

class Account {

static mapping = {
    table "xyz.account"
}

}

http://grails.org/doc/latest/guide/GORM.html#tableAndColumnNames

person R. Valbuena    schedule 05.05.2012
comment
Я уже сделал это, теперь мне нужно создать таблицу соединения между этими двумя. - person Eddard Stark; 06.05.2012