Как реализовать DAO с помощью Java JDBC для БД со связанной таблицей

Допустим есть 4 таблицы:

users:
| id |  login   | password |
----------------------------
|  1 |  user1   |    123   |
   .......................
|__________________________| 

contacts:
| id |    user_id   |  name   |   phone  |
----------------------------
|  1 |      1       |  Alex   |    444   |
   .....................................
|________________________________________| 

task:
| id  | user_id |  name  |    notify Date    |
----------------------------------------------
|  1  |   1     |  task1 |  27.02.2020 22:05 |
   ..........................................
|____________________________________________| 

task_contacts: 
| task_id | contact_id |
------------------------
|    1    |     1      |
........................
|______________________|

Пользователь может создавать задачи и контакты. Задачи могут хранить в себе контакты.

Как правильно реализовать DAO для 4 таблицы связывающую две других? Или вообще как поступить в этом случае?

Для первых 3 таблиц как делать понятно, вытягиваем из таблиц данные с помощью соответствующих DAO классов и в каком-нибудь классе-фасаде все объединяем и отдаем на выход.

Случай с 4 таблицей вгоняет в тупик, в классе DAO мне придется делать запросы в две разные таблицы, а ведь, если я правильно понимаю, идея шаблона - это "одна DAO для одной таблицы". Другой способ - не делать DAO для этой таблицы, а сделать метод, например, findAllByTask(Task task) в DAO для контактов, но в этом случае я буду обращаться в другую таблицу, которая не относится к контактам.

Была мысль использовать DAO для контактов внутри DAO для задач и на выход отдавать сразу готовую задачу с листом контактов, но после небольшого гугления выяснилось, что смешивать DAO очень не рекомендуется.

Хотелось бы научиться делать это правильно. Пробовал гуглить, но путей решения для такого случая найти не смог. В какую сторону посоветуйте копать? Я использую JDBC для обращения к БД в целях обучения, возможности использовать другие способы на данный момент нет.


Ответы (0 шт):