![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
INlHELL |
|
||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.9.2008 Репутация: нет Всего: нет |
Всем доброго времени суток!
Столкнулся со следующей проблемой, в упрощённом виде выглядет так: есть класс First и есть класс Second никак не связанный с First. Необходимо создать "универсалный контейнер" для хранения наборов этих объектов. Т.е. generic класс с коллекцией, который принимает объекты обоих типов, помещает их в коллекцию и сохраняет в БД. Ниже классы тестового приложения:
Самое интересное, контейнер:
Как можно обойти следующие анотации: @CollectionOfElements @OneToMany(targetEntity = First.class) В таком виде пример зарускается и данные вносятся в таблицы, но коллекция только для класса First и при попытке добавления экземпляра класса Second, появляются эксепшены. Активное "гугление" не помогло, есть мысль использовать супер класс и в качестве targetEntity указывать его, но для этого необзодима маппить и его и данное решение мне кажется несовсем верным. Буду очень признателен за любую помощь! |
||||||
|
|||||||
afon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 5.4.2008 Где: Украина, Киев Репутация: нет Всего: 1 |
Накатал большую телегу по мапингу с наследованием и связями, но передумал.
1) На сколько сильно НИКАК НЕ СВЯЗАНЫ First и Second? 2) Сохраняется ли объект Container в базу? 3) имеет ли Container какую-то связь с First и Second? Если 1) Сильно 2) нет, 3) нет - то храни их как хочешь, при любых раскладах будет щастье, выдергиваешь нужный List<First> или List<Second> запросом и суешь в свой Контейнер. Если 1) Есть общие поля 2) да 3) да - то выложу свою телегу ![]() Это сообщение отредактировал(а) afon - 14.1.2010, 17:50 |
|||
|
||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
А как ты это у тебя в базе представлено? У тебя одна колонка содержит айдишники из двух разных таблиц?
-------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
INlHELL |
|
||||||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.9.2008 Репутация: нет Всего: нет |
Собственно вообще никак не связаны, т.е. это две независимые сущности.
Сохраняется, ниже приведу код с тестовым приложением для этих классов.
Не имеет и имеет не должен, в идеале (в конченом приложении) существует множество объектов не связанных иерархией наследования и другими связями (имею ввиду экземпляр одного объекта не содержит ссылок на экземпляр другого). И есть объект (Container) в который можно передать набор (в примере Collection) этих объектов. Главное, что Container должен принимать коллекцию любого типа (Firtst и Second в данном примере) и ничего "не знает" о них. Код использующий эти классы (не догадался, надо было сразу выложить):
Прошу прощения, что сразу не уточнил и за неказистость кода тоже, это исключительно тестовое приложение. Буду благодарен за любой совет или мысль, как это можно реализовать. |
||||||||
|
|||||||||
INlHELL |
|
||||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 22.9.2008 Репутация: нет Всего: нет |
В предыдущем блоке кода скопировал две строки не те:
Правильно конечно так:
Структура БД вот такая. |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Прикрепи картинку к посту. У меня этот сайт заблокирован. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
afon |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 85 Регистрация: 5.4.2008 Где: Украина, Киев Репутация: нет Всего: 1 |
В общем, похоже, что решение с collectionOfElements очень даже удачное для коллекций любых никак не связанных объектов.
Меня только смущает, что
и в тоже время оба First и Second имеют одинаковые поля uuis и name. Но это наверное для простоты и просто совпадение. В любом случае, твой варинат работает, но возможны и другие. Например, можно отэкстендить каждый элемент от какого-нибудь пустого интерфейса, допустим, interface MyStorableCollectionItem, в свой Container прописать Collection<? extends MyStorableCollectionItem> и всех делов. Когда будешь поднимать конкретный Container из базы, всегда можно будет взять instanceof объектов, которые будут в листе. Тут вроде просто. Другие варианты могут базироваться на inheritance strategy, но они дадут свои ограничения. Например, расшаренные строчные id у всех реализаторов MyStorableCollectionItem, или общий пул числовых id. Мне кажется, что изначальный вариант с collectionOfElements, который реализует данную ситуацию всего в одну таблицу, самый подходящий. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |