【问题标题】:How to access Map field in JPA via JPQL如何通过 JPQL 访问 JPA 中的 Map 字段
【发布时间】:2013-12-12 07:24:58
【问题描述】:

例如,如果有一个@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.valuet.key 之外,一切都按照本书进行,因为我真的不知道如何在 JPQL 中呈现映射键和值。谢谢

谢谢

【问题讨论】:

    标签: jpa orm openjpa


    【解决方案1】:

    试试这个:

    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 限定的标识变量 运算符是路径表达式。 KEY、VALUE 和 ENTRY 运算符可以 仅适用于对应于的标识变量 映射值关联或映射值元素集合。的类型 路径表达式是计算结果的类型 手术;也就是说,字段的抽象模式类型是 KEY、VALUE 或 ENTRY 运算符的值(映射键、映射值或 分别映射条目)。[53]

    限定标识变量的语法如下。

    qualified_identification_variable :: =

    KEY(标识变量)|

    (标识变量)|

    条目(标识变量)

    使用 KEY 或 VALUE 运算符的路径表达式可以更进一步 组成。使用 ENTRY 运算符的路径表达式是终端。它 不能进一步组合,只能出现在一个 SELECT 列表中 查询。

    【讨论】:

    • 感谢您一直以来的帮助。最佳答案 ! :)
    猜你喜欢
    • 2022-11-29
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 1970-01-01
    • 1970-01-01
    • 2013-12-17
    • 2020-10-31
    相关资源
    最近更新 更多