我想查询与给定实体(相同类型)相似的实体。 相似性(在最简单的情况下)定义为成员集合中相同项目的数量。
JPQL / HQL查询的外观如何?
我尝试了什么:
SELECT wuSimilar, COUNT(*) AS score FROM WorkUnit wuBase
LEFT JOIN wuBase.tags AS wubTags
LEFT JOIN WorkUnit wuSimilar ON wubTags IN wuSimilar.tags
WHERE wuBase = :base
GROUP BY wuSimilar
ORDER BY score DESC
这基本上是搜索,所以我可以使用Hibernate Search,但不确定它是不是一种矫枉过正。或者,我对像ElasticSearch这样的东西持开放态度,在这种情况下,问题是,是否需要为这一个案例提供它?我可能不会在这个项目中进行另一次搜索。
答案 0 :(得分:0)
我非常接近,我过分依赖我的SQL知识。
JPQL仅对声明的实体关系使用JOIN
。
选择WHERE
中表达式定义的列表时,必须使用逗号连接。
SELECT wuSimilar, COUNT(*) AS score FROM WorkUnit wuBase
LEFT JOIN wuBase.tags AS wubTags
, WorkUnit wuSimilar
WHERE wuBase = :base AND wubTags IN (wuSimilar.tags)
GROUP BY wuSimilar
ORDER BY score DESC
似乎工作,去测试。