Что ж, это типичная проблема при отображении структуры ОО на таблицы реляционных баз данных.
Давайте возьмем в качестве примера вашу OrdersTableModel:
ID заказа | Дата | Имя клиента | Название книги | Автор книги
последние три столбца - это идентификаторы внешнего ключа базы данных вместо значений, которые вы хотите показать.
Для правильного управления у вас есть 2 возможных решения:
ПЕРВОЕ:
описать класс Order следующим образом
public class Order{
private String id;
private Date date;
private Customer customer;
private Book book;
private Author author;
get and set methods
}
Обратите внимание, что клиент относится к типу CUSTOMER, книга типа BOOK ...
Теперь предположим, что вы запрашиваете базу данных, чтобы получить список заказов.
Из возвращенных строк необходимо составить список объектов Order. Конечно, БД возвращает идентификаторы внешнего ключа для клиента, книги и автора так:
- Запрос таблицы заказов db
- Для каждого строения строки и объекта Orders заполните идентификатор и дату значениями строк
- Возьмите идентификатор внешнего ключа для клиента. Создайте новый запрос в таблице базы данных клиентов и выберите нужного клиента на основе идентификатора. Создайте новый идентификатор клиента, заполнив его значения результатами второго запроса. Присвоить объект Customer полевому клиенту объекта Orders
- То же самое для книги и автора
- Добавить объект Order в список
Теперь у вас есть список из 10 заказов
Итерируйте его и заполните отображаемую таблицу заказов.
Например, для отображения поля Customer у вас будет
listOrders[i].getCustomer().getName(). // listOrders[i] is an Order object. getCusotmer returns a customer object. getName is a Customer's method that return the String name.
То же самое для книги и автора
ВТОРОЙ ПОДХОД
дизайн Заказать класс, как это:
public class Order{
private String id;
private Date date;
private int customer;
private int book;
private int author;
get and set methods
}
Обратите внимание, что клиент и т. Д. Являются полями INT. Удержание ссылочной клавиши int извлечено из db
Снова вы запрашиваете заказы таблицы.
Для каждой строки построить объект Order. Заполните значения клиента и т. Д. Просто идентификатором базы данных.
Теперь вы хотите отобразить список заказов.
Итерация по списку.
когда клиент использует
listOrders[i].getCustomer().getName().
ПРИМЕЧАНИЕ, поскольку поле customer является ссылочным ключом int, geCustomer должен
- Выполнить запрос к таблице клиентов БД, чтобы получить правильного клиента на основе идентификатора
- Создание объекта Customer, заполняющего его поля
- Возврат объекта
Итак, различия между двумя оценками:
Сначала создайте полный объект Order, который также содержит объект Customer и т. Д. Когда вам нужно что-то отобразить, у вас есть все, что вам нужно.
Второй подход - построить светлый объект Порядка. Когда нужно, например, отобразить данные клиента, когда нужно запросить базу данных (это называется отложенной загрузкой)
Я предлагаю вам рассмотреть возможность использования ORM, который действительно помогает отображать дизайн ОО в БД и помогает создавать запросы, которые возвращают непосредственно объекты вместо "идентификаторов"