我正在创建一个具有数据库访问权限的应用程序。我不使用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?
是的,我当然可以将字段addressbookid添加到我的联系人类中。但是,这不就是坏对象设计吗?我宁愿将adressbook对象放入联系人类中。仅仅因为数据库策略,我不想让我的模型变得“肮脏”?! – homedom
是的,为什么不呢,您可以使用对地址簿对象的引用并使用getAddressBookId()通过地址簿对象获取ID。要么引用你的对象,要么仅仅依赖于id取决于你的需求。如果你想加载所有级联结构,最好绑定一个对象。 – SanyaLuc
我没有得到你的答案。我有一个包含对象地址簿的对象Contact。现在我有一个方法应该读取这两个对象,并设置联系人对象中的地址簿。这种方法同时使用daos。但在阅读联系人后,我没有任何参考addresabookid,因为这个列表不是我的联系人类的属性,因为这是恕我直言不良设计。那么如何将addressbookid从contactdao传递给读取这两个对象的方法? – homedom