2013-02-05 103 views
2

如何在使用DAO模式时处理多对多的关系? DAO负责使用3-rd链接表连接两个实体吗?例如,我有两个实体:CustomerProductDAO。多对多关系

,我需要提供类似的方法:要求使用3挡表作为链接表

public void assignCustomerToProduct(...); 
public List<Product> getSelledProducts(long customerId); 

此方法。 是CustomerDao负责提供这种方法吗?或者将这些方法排除在服务层上更好?

+0

顺便说一句,我们没有英文的“Selled”。也许,你的意思是“已售出”;) –

回答

1

其中一个对象应该拥有这种关系。因此,例如,只有在保存员工时才能保存职位。

如果你这样做,那么员工就像一个聚合根(如果你正在谈论DDD存储库)成为一个(一点)。然后,存储库负责根据需要创建位置,并在链接表中插入多对多条目。

如果Position是一个聚合根本身,那么EmployeeRepository只负责更新链接表,但不负责持续的位置。

+0

对不起,我没有使用任何Repository模式。有人编辑我的问题并添加了'repository-pattern'标签。实际上,我使用_only_ DAO模式,甚至更多我不知道什么是Repository模式以及如何使用它。我的问题符合DAO模式。或更特别 - GenericDAO。附:我使用JDBC。 ...如果你可以提供存储库模式优于DAO的一些优点,为什么我更好地使用Repository而不是DAO我准备好更改我的代码:) – MyTitle

+0

它们非常相似,但是Repository与Domain Driven Design(DDD)一起使用,它对于它应该做什么有一些限制。我认为我上面写的大部分内容仍然适用。因此,例如,您的EmployeeDAO可以负责将员工和行存储在员工和职位之间的链接表中。有一个真正的双向关系,其中存储将持续的东西链接表是很多工作,可能不值得。 – Augusto

+0

'如果Position是一个聚合根本身,那么EmployeeRepository只负责更新链接表,但不负责持续位置。因此,在'EmployyDAO'中提到像我提到的方法并不坏? – MyTitle