2013-11-26 31 views
1

例如,如果有@ElementCollection文件是Map類型,那麼如果我嘗試獲取地圖鍵或值字段,那麼如何處理?如何訪問JPA中的地圖字段通過JPQL

Class Deal{ 
..... 

private String name; 

private String department; 

private DealType type; 

@AttributeOverrides({ 
    @AttributeOverride(name="value.in.available", [email protected](name="in_avl")), 
    @AttributeOverride(name="value.in.unavailable", [email protected](name="in_unv")), 
    @AttributeOverride(name="value.out.available", [email protected](name="out_avl")), 
    @AttributeOverride(name="value.out.unavailable", [email protected](name="out_unv")) 
}) 
@ElementCollection(fetch = FetchType.EAGER) 
    ...... 
} 

所以,如果我試圖讓這樣的事情

select new SummaryAmount(SUM(t.value.in.available), SUM(t.value.in.unavailable), 
SUM(t.value.out.available), SUM(t.value.out.unavailable)) from Deal AS d INNER 
JOIN d.transactionAmounts t GROUP by t.key; 

有什麼事情可能現在能工作呢?一切都按照書除了我發明了t.valuet.key因爲我真的不知道如何呈現在JPQL.Thanks地圖鍵和值

感謝

回答

3

試試這個:

SELECT new SummaryAmount(SUM(VALUE(t).in.available), SUM(VALUE(t)in.unavailable), 
SUM(VALUE(t).out.available), SUM(VALUE(t).out.unavailable)) from Deal AS d INNER 
JOIN d.transactionAmounts t GROUP by KEY(t); 

而且現在是JPA規範的摘錄:

由KEY,VALUE或ENTRY 運算符定義的標識變量是路徑express離子。 KEY,VALUE和ENTRY運算符可能只適用於對應於映射值關聯或映射值元素集合的標識變量。 的類型路徑表達式是作爲 操作的結果計算的類型;也就是KEY,VALUE或ENTRY運算符的值(分別爲map鍵,map值或 map條目)的字段的抽象模式類型。

合格識別變量的語法如下。

qualified_identification_variable :: =

KEY(identification_variable)|

VALUE(identification_variable)|

ENTRY(identification_variable)

使用鍵或值操作者可以進一步 組成的路徑表達式。使用ENTRY運算符的路徑表達式是終端。它 不能進一步組成,並且只能出現在 查詢的SELECT列表中。

+1

感謝您的不斷的幫助。最佳答案 ! :) – Dreamer