8

我有一个像这样的豆子

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

Class TestB
{
    String data;
    ...
}

我想获取TestA数据以及地图testBMapwhere key ='test1'

我如何使用 Hibernate 来做到这一点。

4

4 回答 4

4

键必须是 TestB 的持久字段之一的值(假设这个字段的名称是“foo”),所以这段代码应该可以工作:

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();

映射是这样的: Country 具有类型为 LocalizedText(一个实体)的属性名称,其中 LocalizedText包含Map<String, String>翻译,其中键是语言代码,值是对应于该语言的国家名称。所以我不得不为翻译创建别名,然后在 .indices 中使用“魔术”后缀“.indices” eq()

于 2013-12-10T14:46:59.217 回答
2

在 Hibernate 实现 JPA 的key()功能(参见HHH-5396)之前,您可以使用该index()功能:

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 回答