hibernate - 在嵌入 map 上选择 HQL

标签 hibernate localization hql

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

@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

但是失败并出现无法取消引用标量集合元素异常。

现在hibernate文档说,我必须使用elements()和indices()作为值和键。对于键来说,使用 :locale inindex(name) 很容易,但是我如何才能以不区分大小写的方式匹配该区域设置的部分值呢?

万一这在我的模型中无法通过 hql 实现,我还能如何建模可搜索本地化?

最佳答案

我最终想出了以下解决方案(实际上我很确定它也可以使用平面图而不是可嵌入对象来工作)

@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)

编辑:实际上我无法让它与 map 一起使用,所以我毕竟使用了@Embeddable解决方案

关于hibernate - 在嵌入 map 上选择 HQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14296113/

相关文章:

java - 你如何处理业务层的 Hibernate Session?

c# - 单元测试中的特殊本地字符在任何地方都不相同

java.lang.IllegalArgumentException : org. hibernate.QueryException : No data type for node: org. hibernate.hql.internal.ast.tree.MethodNode

hadoop - 在特定列上选择不同但也在配置单元中选择其他列

nhibernate - 在HQL上使用最小值,最大值和计数

java - 使用 Hibernate 和 Spring MVC 在级联上保存包

java - 添加到@ManyToOne 时更新父引用

Hibernate - 更新与级联类型 all-delete-orphan 映射的集合的正确方法

android - 重构——Android字符串提取问题

localization - asp 和 iis 6.0 从哪里得到它的日期格式