How to use key of MAP in Criteria Query?
I have a Bean like this
Class TestA
{
Map<String,TestB> testBMap;
}
Class TestB
{
String data;
...
}
I want to fetch the TestA
d开发者_运维技巧ata along with the map testBMap
where key ='test1'
.
How can i do this using Hibernate.
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();
In my case this did work fine:
countries = getSession().createCriteria( Country.class ).add( Restrictions.in( "region", regions ) )
.createAlias( "name.translations", "translation" )
.add( Restrictions.eq( "translation.indices", 'en' )).list();
The mapping is like this:
Country has property name which is of type LocalizedText (an entity)
LocalizedText
contains Map<String, String>
translations where key is language code and value is country name that corresponds to that language.
So i had to create alias for translations and then user "magic" postfix ".indices" in eq()
.
Until Hibernate implements JPA's key()
function (see HHH-5396), you can use the index()
function:
session
.createQuery("select a from TestA a join a.testBMap m where index(m) = :key")
.setParameter("key", "test1")
.list();
This works for me:
Criteria criteria = session.createCriteria(TestA.class);
criteria.createAlias("testBMap", "t");
criteria.add(Restrictions.eq("t." + CollectionPropertyNames.COLLECTION_INDEX, "test1"));
return criteria.list();
精彩评论