例如,如果@ElementCollection
文件的类型为Map
,那么如果我尝试获取地图键或值字段,那么如何处理?
Class Deal{
.....
private String name;
private String department;
private DealType type;
@AttributeOverrides({
@AttributeOverride(name="value.in.available", column=@Column(name="in_avl")),
@AttributeOverride(name="value.in.unavailable", column=@Column(name="in_unv")),
@AttributeOverride(name="value.out.available", column=@Column(name="out_avl")),
@AttributeOverride(name="value.out.unavailable", column=@Column(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中呈现地图键和值。谢谢
由于
答案 0 :(得分: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限定的标识变量 operator是一个路径表达式。 KEY,VALUE和ENTRY运算符可以 仅适用于对应的识别变量 地图值关联或地图值元素集合。的类型 路径表达式是作为结果计算的类型 操作;也就是说,字段的抽象模式类型 KEY,VALUE或ENTRY运算符的值(映射键,映射值或 地图条目分别)。[53]
限定识别变量的语法如下。
qualified_identification_variable :: =
KEY (identification_variable)|
VALUE (identification_variable)|
<强> ENTRY 强>(identification_variable)
使用KEY或VALUE运算符的路径表达式可以更进一步 组成。使用ENTRY运算符的路径表达式是终端。它 无法进一步组合,只能出现在一个SELECT列表中 查询。