LIKE查询HQL实体中Map ElementCollection的值
Posted
技术标签:
【中文标题】LIKE查询HQL实体中Map ElementCollection的值【英文标题】:LIKE query on values of Map ElementCollection in entity in HQL 【发布时间】:2015-09-03 18:21:31 【问题描述】:我有一个名为 « Form » 的实体,其中包含 (key/value)=(language code/translation) 的 Map « details »:
@Entity
class Form
:
@ElementCollection(fetch = FetchType.EAGER)
@MapKeyColumn(name = "language", length = 50, nullable = false)
@MapKeyEnumerated(EnumType.STRING)
@Column(name = "value", length = 150)
private final Map<Language, String> details = new HashMap<Language, String> ();
:
我想检索翻译中包含 (!) « xxx » 的所有表单记录。
以下子句检索“Form”,其中地图包含一个“值”,其值与搜索流完全相同。不过,我想应用 LIKE 条件。
@Query("SELECT f FROM Form f JOIN f.details d WHERE KEY(d) = :language AND :search IN elements(d) ")
感谢您的帮助!
【问题讨论】:
您的意思是在您的WHERE
子句中,即WHERE ... AND x IN y AND a LIKE b
?
我想做类似的事情:@Query("SELECT f FROM Form f JOIN f.details d WHERE KEY(d) = :language AND VALUE(d) LIKE :search ")
【参考方案1】:
在 SQL 中,%
是LIKE
运算符中使用的通配符。您的查询将类似于:
@Query("SELECT f FROM Form f JOIN f.details d
WHERE KEY(d) = :language
AND VALUE(d) LIKE '%' + :search + '%'")
如果这不起作用,您可能必须将 %
附加到变量 :search
的开头和结尾
【讨论】:
以上是关于LIKE查询HQL实体中Map ElementCollection的值的主要内容,如果未能解决你的问题,请参考以下文章
Hibernate HQL查询 插入 更新(update)实例