嵌入式地图上的HQL选择

时间:2013-01-12 17:48:39

标签: hibernate localization hql

我想在我的模型中使用(可搜索)本地化,我想出了以下模型:

@Entity
public class Category {
    ...
    @ElementCollection
    //key = language code (e.g. 'en') and value = localized label
    private Map<String, String> name;
    ...
}

我想做的不是在特定的本地化中查询包含casesensitive针的类别(例如,英文名称为'%abc%')

我试过像

这样的东西
from Category where name.key = :locale and lower(name.value) like :text

但是无法取消引用标量收集元素异常。

现在hibernate文档说,我必须使用elements()和indices()来表示值和键。对于密钥,使用:locale in indices(name)可以很容易,但是如何以一种不区分大小写的方式匹配此区域设置的一部分值呢?

为了防止hql与我的模型不可行,我还能如何模拟可搜索的本地化?

1 个答案:

答案 0 :(得分:3)

我终于提出了以下解决方案(实际上我很确定它也可以使用计划图而不是可嵌入对象)

@Entity
public class Category {
    ...
    @ElementCollection
    @CollectionTable(name = "locale_category_name", joinColumns=@JoinColumn(name="id"))
List<Localization> name;
    ...
}

@Embeddable
public class Localization {
    @NotNull
    public String locale;
    @NotNull
    public String label;
}

和查询(使用join ... with ...)

from Category c join c.name l with (l.locale = :locale and lower(l.label) like :text)

编辑:实际上我无法使用地图,所以我毕竟使用了@Embeddable解决方案