В моем случае это работало нормально:
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" в eq()
.