2013-11-26 2 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.value и t.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:

переменная идентификация квалифицируется ключ, значение, или ENTRY оператора представляет собой путь экспресс ион. Операторы KEY, VALUE и ENTRY могут применяться только к идентификационным переменным, которые соответствуют картографическим ассоциациям или коллекциям элементов карты. Тип выражения - это тип, вычисленный в результате операции ; т. е. тип абстрактной схемы поля, который является значением оператора KEY, VALUE или ENTRY (ключ карты, значение карты или ) соответственно. [53]

Синтаксис для квалифицированных идентификационных переменных следующий.

qualified_identification_variable :: =

KEY (identification_variable) |

VALUE (ident_variable) |

ЗАПИСЬ (identification_variable)

Выражение пути с использованием оператора ключ или значение может быть дополнительно состоит. Выражение пути с использованием оператора ENTRY является терминальным. Он не может быть дополнительно составлен и может отображаться только в списке SELECT запроса .

+1

Спасибо за постоянную помощь. Лучший ответ ! :) – Dreamer

Смежные вопросы