![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| poulmart |
|
||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.2.2008 Репутация: нет Всего: нет |
Задача: Создать справочник элементов в виде дерева. (ну типа файловой системы единственно что элементы однотипные)
Решение: Создал два класса один (Spravochnik) отвечает за хранение элемента, второй (Association) за хранение связей между элементами. Возникла такая проблема: Т.к. справочников может быть несколько. то и пар классов должно быть столько же. И фактически в каждой паре дублируется код (ну типа setParent, gePArent, setChildren, getChildren и т.д.). Подскажите как сделать так, чтобы создание нового справочника обходилось меньшим дублированием кода. P.S. Сильно не пинать. Только учусь Код: Spravochnik.java
Association.java
|
||||
|
|||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Может быть просто перенести всю функциональность класса Association в класс Spravochnik? Тогда класс Association вообще не будет нужен. Пусть класс Spravochnik сам рулит своими связями.
|
|||
|
||||
| poulmart |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.2.2008 Репутация: нет Всего: нет |
Тут дело не в том что что один класс или два.
А вот в чем: Spravochnik ExtendedSpravochnik setParent(Spravochnik) setParent(ExtendedSpravochnik) Spravochnik getparent() ExtendedSpravochnik getparent() setChild(Spravochnik) setChild(ExtendedSpravochnik) Spravochnik getChild() ExtendedSpravochnik getChild() методы делаю одно и то же. Отличие только тип выдаваемых и принимаемых объектов. Теперь по поводу
Почему я таблицу разбил на две части. Изначально я хотел сделать вот такую таблица: Таблица ID - Name ID_Parent (Таблица.ID) В скобках указан внешний ключ. Но база отказалась принимать внешний ключ из этой же таблицы. Пришлось разбивать на две таблицы. Таблица 1 (Справочник) ID Name Таблица 2 (Ассоциации) ID ID_PARENT (Таблица1.ID) ID_CHILD (Таблица1.ID) Ну а дальше принцип JPA одна таблица - один объект. |
|||
|
||||
| Kangaroo |
|
|||
|
AA - Aussie Animal ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 2042 Регистрация: 7.10.2006 Где: US Репутация: 14 Всего: 104 |
Зачем делать такие же методы для ExtendedSpravochnik ? Нужно просто использовать методы Spavochnik. В те методы параметром можно передать и Spravochnik i ExtendedSpravochnik. Странно. Должно работать. Это стандартное хранение иерархие в БД. Что за база? -------------------- Lost.... |
|||
|
||||
| poulmart |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.2.2008 Репутация: нет Всего: нет |
Понял. Спасибо. После более детального чтения документации все заработало. БД - Derby А вот код создания таблицы.
Теперь по поводу расширения функционала. Имеется базовый класс Справочника. в нем реализована общая для всех справочников логика. А на базе этого класса создавать конкретные справочники. Например Goods , Customers. Просто хочется убрать возможность добавления Goods в Customers и наоборот в принципе. |
||||||
|
|||||||
| powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Напишите ваш класс с использованием Generic, тогда компилятор будет следить за типом справочника. Вот тут есть туториал. |
|||
|
||||
| poulmart |
|
||||||
|
Новичок Профиль Группа: Участник Сообщений: 17 Регистрация: 12.2.2008 Репутация: нет Всего: нет |
Все ОК. То что надо.
Спасибо powerOn, Вот тестовый пример, если кому еще надо.
|
||||||
|
|||||||
![]()
|
| Правила форума "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. |