2015-05-23 2 views
3

Я создаю приложение с доступом к базе данных. Я не использую JPA или JooQ или другие фреймворки по причинам (и не хочу. Также это не важно для моего вопроса). Поэтому я использую JDBC и пишу простой sql.Несколько DAO с зависимостями (внешний ключ)

Моя модель выглядит следующим образом:

public class Contact{ 
    AddressBook addressBok; 
    String name; 
    ... 
} 

теперь я создал 2 Даосы один для контакта и AddressBook. Таблица My Contact имеет внешний ключ в таблице AddressBook (address_book_id). У меня есть класс обслуживания (например, ContactService), который будет считывать каждый объект с помощью соответствующего DAO и объединять его с одним контактом.

Проблема теперь: у меня есть адрес_book_id в ResultSet в ContactDAO. Как передать его классу службы, который затем читает соответствующую адресную книгу с помощью AddressBookDAO? Поскольку модель разделяется, это нехорошее решение поместить String addressBookId в контакт, поскольку клиенты, использующие эту модель, могут ничего не знать о базе данных.

Я знаю, что эти вопросы, но нет ответа о том, как это сделать: Using DAOs with composite Objects Can a DAO call DAO?

ответ

0

Лучше всего использовать доменный объект POJO в каждой таблице, где вы можете сохранить ваши поля отношений как address_book_id. Таким образом, у вас будут древовидные классы Contact, Address, AddressBook и независимые DAO ContractDAO, AddressDAO, AddressBookDAO. Ваш ContactService будет управлять этими 6 объектами для загрузки, сохранения, изменения связанных данных.

+0

Да, конечно, я могу добавить поле адресbookid в мой контактный класс. Но разве это не плохой дизайн объекта? Я предпочел бы разместить объект adressbook в классе контактов. Я не хочу, чтобы моя модель была «грязной» только из-за стратегии базы данных ?! – homedom

+0

Да, почему бы и нет, вы можете использовать ссылку на объект адресной книги и использовать getAddressBookId(), чтобы получить идентификатор через объект адресной книги. Либо укажите ссылку на свой объект, либо только идентификатор зависит от ваших потребностей. Если вы хотите загрузить всю каскадную структуру, лучше привязать весь объект. – SanyaLuc

+0

Я не получил вашего ответа. У меня есть объект Contact, который содержит адресную книгу объекта. Теперь у меня есть метод, который должен читать оба объекта и устанавливать адресную книгу в контактном объекте. Этот метод использует оба daos. Но после прочтения контакта с contactdao у меня нет никакой ссылки на addresabookid, потому что этот список не является атрибутом моего контактного класса, так как это плохой дизайн IMHO. Итак, как мне передать адресbookidid из contactdao в метод, считывающий оба объекта? – homedom

Смежные вопросы