2012-02-22 98 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