2015-05-23 111 views
3

我正在创建一个具有数据库访问权限的应用程序。我不使用JPA,也不使用JooQ或其他框架(并且不想这样做,这对我的问题并不重要)。所以我使用JDBC并编写普通的sql。具有依赖关系的多个DAO(外键)

我的模型看起来是这样的:

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

我现在创建2点的DAO,一个用于联系和通讯录。我的联系人表具有通讯簿表(address_book_id)的外键。 我有一个服务类(例如联系服务),它将使用相应的DAO读取每个对象,并将其结合到一个联系人。

现在的问题是:我在ContactDAO中的ResultSet中有address_book_id。我如何将它传递给服务类,然后使用AddressBookDAO读取对应的AddressBook?由于模型是共享的,因此使用此模型的客户端可能不知道有关数据库的任何信息,因此将String addressBookId设置为联系人不是一个好的解决方案。

我知道这些问题,但对如何做到这一点没有答案: Using DAOs with composite Objects Can a DAO call DAO?

回答

0

最好的做法是使用每个每个表,你可以保存你的关系领域,如address_book_id POJO域对象。所以你将有树独立类Contact,Address,AddressBook和独立DAO ContractDAO,AddressDAO,AddressBookDAO。您的ContactService将使用这6个对象进行操作,以加载,保存,修改相关数据。

+0

是的,我当然可以将字段addressbookid添加到我的联系人类中。但是,这不就是坏对象设计吗?我宁愿将adressbook对象放入联系人类中。仅仅因为数据库策略,我不想让我的模型变得“肮脏”?! – homedom

+0

是的,为什么不呢,您可以使用对地址簿对象的引用并使用getAddressBookId()通过地址簿对象获取ID。要么引用你的对象,要么仅仅依赖于id取决于你的需求。如果你想加载所有级联结构,最好绑定一个对象。 – SanyaLuc

+0

我没有得到你的答案。我有一个包含对象地址簿的对象Contact。现在我有一个方法应该读取这两个对象,并设置联系人对象中的地址簿。这种方法同时使用daos。但在阅读联系人后,我没有任何参考addresabookid,因为这个列表不是我的联系人类的属性,因为这是恕我直言不良设计。那么如何将addressbookid从contactdao传递给读取这两个对象的方法? – homedom

相关问题