QueryDsl - 基于密钥过滤Map

时间:2015-02-10 11:32:15

标签: java sql hibernate dictionary querydsl

我的hibenrate实体类中有以下属性:

@MapKeyJoinColumn(name = "language_code")
@LazyCollection(LazyCollectionOption.EXTRA)
@ElementCollection(fetch = FetchType.LAZY)
@CollectionTable(name = "text_translations", joinColumns = @JoinColumn(name = "text_id"))
private Map<Language, String> translations = new HashMap<>();

现在我想查询此实体并按用户的语言(即按地图的键)过滤地图内容。我已经加入了我的查询:

StringPath titleTran = new StringPath("title_tran");
from(entity).
.leftJoin(entity.translations, titleTran).fetch().where(?mapKey?.eq(userLanguage));

我需要的是什么?mapKey?通过titleTran路径的语言路径。这在QueryDsl中是否可行?

2 个答案:

答案 0 :(得分:3)

如果要搜索给定的Map键,可以使用以下HQL查询:

select me
from MyEntity me
join me.translations tr
where
    index(tr) = :lang

或使用JPQL:

select me
from MyEntity me
join me.translations tr
where
    key(tr) = :lang

答案 1 :(得分:0)

在Querydsl JPA中,以下作品

query.from(me).where(me.translations.containsKey(lang)).list(me);