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'

しかし、それは動作しません:(


編集:グーグルで検索した後、シータスタイルの結合を使用したクエリを示唆するこのリンクを見つけました:

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

このクエリは私にとって奇妙で、理解できません。おもしろいのは、index() と elements() のどちらを使用しても、Flight オブジェクトの名前 (マップの値) によって結果が制限されることです!!!

誰が私に何が起こっているのか説明できますか??!!

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 に答える