如何在hql中访问地图的键或值

时间:2013-01-07 19:42:15

标签: hibernate map

假设我有以下课程:

@Entity
public class CompanyImpl extends BaseEntity {

    @OneToMany(cascade=CascadeType.ALL)
    private Map<Cat,Flight> flightCats;

Cat和Flight课程都有一个&#34;名称&#34;属性。我怎么能:

  1. 选择那些在他们的flightCats地图中的公司名为&#34; Meow&#34;
  2. 选择在其flightCats地图中的公司名为&#34; Ocean&#34;
  3. 的航班

    我想到像

    这样的东西
    from CompanyImpl co where co.flightCats.cat.name='Meow'
    

    但它不起作用:(


    编辑:经过一些谷歌搜索后,我发现这个link建议使用theta风格的连接进行查询:

    from CompanyImpl co left join co.flightCats cf where 
    (cf in indices(co.flightCats)) and (cf.name = 'Ocean')
    

    这个查询对我来说很奇怪,我无法理解。有趣的是它限制Flight对象的结果&#39;名称(地图的值),无论我是否使用indices()或elements()!!!

    有人可以向我解释发生了什么事吗?? !!

1 个答案:

答案 0 :(得分:2)

在(N)Hibernate文档中记录的内容并不是很好,但记录在案:

它有特殊的HQL函数:indices()elements()

尝试这样的事情:

from CompanyImpl co where indices(co.flightCats).name='Meow'

NHibernate HQL文档提到了chapter 14中的索引和元素。