![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Shaggie |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: 2 Всего: 72 |
Существует БД:
Связь между таблицами cd и style осуществляется по принципу many-to-many, для чего существует сводная таблица cd_style. Маппинг таблицы style:
Маппинг таблицы cd:
Всё работает, в программе после вызова Cd.getStyles() генерится собственный сет объектов Style. Это нормально. Но неэффективно с точки зрения логики программы. Гораздо правильнее было бы использовать коллекцию TreeMap. Но я не могу написать маппинг! Кто-нибудь сталкивался с необходимостью создавать мап объектов? В моём примере ключом, по идее, должен оказаться INT PRIMARY KEY таблицы style, а значением - соответствующий объект Style. Возможные варианты:
Уже голова пухнет, но ответа так и не нашёл. Если можете - помогите, пожалуйста! |
||||||||
|
|||||||||
| Shaggie |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 570 Регистрация: 21.12.2006 Где: outer space Репутация: 2 Всего: 72 |
Спасибо powerOn, который запостил в одном из обсуждений ссылку на http://www.java2s.com. Там я нашёл вариант решения проблемы, но он меня не очень устроил.
Как вы могли заметить, в элементе Map должно быть ещё три элемента, причём у каждого необходимо указать колонку из таблицы, с которой делается маппинг. То есть в промежуточной таблице должно быть ТРИ колонки! С одной стороны, это непорядок. С другой, тогда всё действительно работает. В результате промежуточная таблица в базе выглядит так:
а мап маппинга (извините... слова почти одинаковые, а понятия разные) таблицы cd так:
Необходимые пояснения. Число cd_id - это тот объект Cd, у которого будет свой мап объектов Style. Число st_key - это объект типа Integer, который будет ключом (key) к для каждого Style в мапе. Число st_id - это указатель на тот объект Style, который будет значением (value) в мапе. Теперь после вызова Cd.getStyles() генерится собственный мап объектов Style, и это есть как раз то, что мне было нужно. НО! Появляются определённые издержки. Теперь запрос SELECT * FROM cd_style; вернёт такое вот чудо: cd_id | st_key | st_id ------------------------ 1 | 1 | 1 1 | 3 | 3 2 | 1 | 1 2 | 6 | 6 2 | 7 | 7 В результате таблица распухает на треть безо всякой пользы для цивилизации. Налицо подгон базы под hibernate, а ведь по идее он должен работать с тем, что дают, и уж тем более не ломать нормализацию... Однако повторюсь, что сохранять зависимость many-to-many наиболее эффективно всё-таки в мапе. Поэтому тема остаётся открытой. Есть ли способы замапить связь, используя только ДВЕ колонки в промежуточной таблице? |
||||
|
|||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |