gpt4 book ai didi

hibernate - 在嵌入 map 上选择 HQL

转载 作者:行者123 更新时间:2023-12-02 22:50:19 28 4
gpt4 key购买 nike

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

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

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com