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的值的主要内容,如果未能解决你的问题,请参考以下文章

hql实体查询返回的是什么记录?

相关实体的子查询的 HQL 错误

Hibernate HQL查询语句总结

Hibernate HQL查询 插入 更新(update)实例

转: Hibernate HQL查询 插入 更新(update)实例

具有最大值的实体的 HQL 查询