6

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

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

我不想做的是查询在特定本地化中包含不区分大小写的针的类别(例如,英文名称中带有“%abc%”)

我尝试了类似的东西

from Category where name.key = :locale and lower(name.value) like :text

但是由于无法取消引用标量集合元素异常而失败。

现在休眠文档说,我必须使用 elements() 和 indices() 作为值和键。对于密钥,这将很容易使用:locale in indices(name),但是我如何以不区分大小写的方式匹配此语言环境的一部分值?

以防万一这不适用于我的模型的 hql,我还能如何建模可搜索的本地化?

4

1 回答 1

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 解决方案

于 2013-01-12T19:41:59.293 回答