3

假设我有以下课程:

@Entity
public class CompanyImpl extends BaseEntity {

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

Cat 和 Flight 类都有一个“name”属性。我怎样才能:

  1. 选择在他们的 flightCats 地图中有名为“Meow”的猫的公司
  2. 选择在他们的 flightCats 地图中有名为“Ocean”的航班的公司

我想到了类似的东西

from CompanyImpl co where co.flightCats.cat.name='Meow'

但它不起作用:(


编辑:经过一番谷歌搜索后,我发现此链接建议使用 theta 样式连接进行查询:

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

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

谁能给我解释一下这是怎么回事??!!

4

1 回答 1

2

(N)Hibernate 文档中没有很好地记录它,但它被记录在案:

它有特殊的 HQL 功能:indices()elements()

尝试这样的事情:

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

NHibernate HQL 文档在第 14 章中提到了索引和元素。

于 2013-01-07T19:45:07.417 回答