QueryDsl - 根据键过滤地图
QueryDsl - filtering Map based on key
我的 hibenrate 实体 class 中有以下 属性:
@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 中有可能吗?
如果要搜索给定的映射键,可以使用以下 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
在 Querydsl JPA 中,以下工作
query.from(me).where(me.translations.containsKey(lang)).list(me);
我的 hibenrate 实体 class 中有以下 属性:
@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 中有可能吗?
如果要搜索给定的映射键,可以使用以下 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
在 Querydsl JPA 中,以下工作
query.from(me).where(me.translations.containsKey(lang)).list(me);