2012-02-22 72 views
0

我有以下实体,每个数据库映射到表:休眠加入设计

运动 业务 客户

活动实体持有该活动是开放的业务。 客户端实体拥有它所属的业务。通过搜索与广告系列具有相同business_id的所有客户,我可以获得广告系列的客户(猜测此设计可能会得到改进)。

我需要查找自上次运行广告系列后进入系统的所有广告系列客户,并将广告系列也发送给他们。什么是最好的设计呢?

我想我需要创建一个名为CampaignClient(特定活动的客户端)的新实体,但我不知道如何使用Hibernate实现此实体。

回答

1
select client from campaign campaign 
inner join campaign.business business 
inner join business.clients client 
where client.creationDate > campaign.lastRunDate 

或者,如果你没有从商业到客户的关联(但你应该有一个):

select client from campaign campaign 
inner join campaign.business business 
where client.business.id = business.id 
and client.creationDate > campaign.lastRunDate 
+0

它将如何,如果我有每个企业的多个广告活动工作(并因此每个客户端还有多个广告系列)?对于某些广告系列,客户端可能是新的,对于最近运行的广告系列,客户端可能是“旧”(已处理) – Alex 2012-02-22 11:44:31

+0

我的查询没有包含'campain.id =:id'子句,它允许返回特定活动的所有客户端。如果您有多个广告系列,请使用“选择客户,来自...的广告系列”。每个返回的行都将包含一个客户端和一个发送给此客户端的活动。 – 2012-02-22 11:48:53