8

私はこのようなBeanを持っています

Class TestA
{
    Map<String,TestB> testBMap;
}

Class TestB
{
    String data;
    ...
}

マップとTestA一緒にデータを取得したい.testBMapkey ='test1'

Hibernate を使用してこれを行うにはどうすればよいですか。

4

4 に答える 4

4

The key must be the value of one of the persistent fields of TestB (let's says this field is names "foo"), so this code should work :

Criteria criteria = session.createCriteria(TestA.class, "a");
criteria.createAlias("a.testBMap", "b");
criteria.add(Restrictions.eq("b.foo", "test1"));
criteria.setFetchMode("a.testBMap", FetchMode.JOIN);
return criteria.list();
于 2011-02-14T12:00:26.130 に答える
3

私の場合、これはうまくいきました:

countries = getSession().createCriteria( Country.class ).add( Restrictions.in( "region", regions ) )
                .createAlias( "name.translations", "translation" )
                .add( Restrictions.eq( "translation.indices", 'en' )).list();

マッピングは次のようになります。 国には LocalizedText 型のプロパティ名 (エンティティ) LocalizedTextが含まれますMap<String, String>。キーは言語コード、値はその言語に対応する国名です。そのため、翻訳用のエイリアスを作成してから、.indices で "magic" 接尾辞 ".indices" をユーザーに作成する必要がありましたeq()

于 2013-12-10T14:46:59.217 に答える
2

Hibernate が JPA のkey()関数を実装するまで ( HHH-5396index()を参照)、次の関数を使用できます。

session
    .createQuery("select a from TestA a join a.testBMap m where index(m) = :key")
    .setParameter("key", "test1")
    .list();
于 2011-06-03T09:58:52.357 に答える
1

これは私のために働く:

Criteria criteria = session.createCriteria(TestA.class);
criteria.createAlias("testBMap", "t");
criteria.add(Restrictions.eq("t." + CollectionPropertyNames.COLLECTION_INDEX, "test1"));
return criteria.list();
于 2014-05-06T21:27:46.893 に答える