2016-01-12 57 views
0

我有這些實體:SQL/HQL查詢:發現有配襯一些參數對象的列表對象

ER Diagram http://i64.tinypic.com/24b6sut.png

想我收到此map<String,String>

「性別」: 「男」

「時代」: 「30」

我需要找到包含TargetGroup的廣告系列,其中包含地圖中的所有這些鍵/值。 實施例:

Map<String,String> keyValueParameters = new HashMap<String,String>(); 
keyValueParameters.put("gender","male"); 
keyValueParameters.put("age","30"); 

List<Campaign> campaignsResult = getCampaigns(keyValueParameters); 
Campaign aCampaign = campaignsResult.get(someIndex); 
TargetGroup aTargetGroup = aCampaign.getTargetGroup(); 
List<TargetValue> targetValues = aTargetGroup.getTargetValues(); 
targetValues.get(x).getKey() //"gender" 
targetValues.get(x).getValue() //"male" 
targetValues.get(y).getKey() //"age" 
targetValues.get(y).getValue() //"30" 
targetValues.get(z).getKey() //some other key 
+0

我發現你的問題很難理解,而且看起來似乎很複雜,我不應該猜測你的意圖,你可以添加表結構,表中的示例數據,並對預期結果進行抽樣以充分說明您的需求rements。 – Turophile

+0

因此,有一個TargetGroup(或可能多於一個)連接到每個TargetValue,並且您需要鏈接到該TargetGroup的Campaigns中的信息。這聽起來正確嗎? – EvilBob22

+0

請檢查更新後的問題。 EvilBob22>我想你在說什麼不是我的場景 –

回答

1

查詢返回既具有鍵/值對目標羣體的清單。 (2從條件的段具有計數

SELECT targetGroupID 
FROM TargetGroup tg 
    INNER JOIN TargetValue tv ON tg.targetGourpId=tv.targetGourpId 
WHERE (tv.key='gender' and tv.value='male') 
    OR (tv.key='age' and tv.value='30') 
GROUP BY targetGroupID 
HAVING COUNT(targetGroupID)>=2 

然後我們可以使用上面的查詢來獲得相應的廣告系列

SELECT * 
FROM Campaign c 
    INNER JOIN (the select above) as sub ON c.targetGroupID=sub.targetGroupID 

我幾乎可以用純休眠。HAVING是可能是一個問題。你可以試着寫你自己的hql這個

+0

謝謝!它爲我工作 –

相關問題