[英]Is there any way to do this query in HQL?
我是Hibernate的新手,正在用Java创建一个简单的电影查找器应用程序。 我需要在dao中进行查询以按关键字列表搜索电影。 我知道如何在SQL中执行此操作,但是我想知道是否有任何方法可以进行HQL查询。 dao中的Java方法接收一个List,该List是keyowrds的列表,而SQL语句如下所示:
SELECT *
FROM movies
WHERE name LIKE '%keyword1%' OR name LIKE 'keyword2' ...
因此,要实现这一点,有必要遍历所有列表并为每个关键字连接查询。
可以在HQL中使此查询更简单,因此您可以将关键字列表传递给que查询,以便它可以与LIKE语句一起使用?
谢谢。
SELECT *
FROM movies
WHERE name LIKE '%keyword1%' OR name LIKE 'keyword2'
将转换为HQL为
from movies m where m.name like :keyword1 or m.name like :keyword2
查询时,您需要传递命名参数keyword1
和keyword2
。
而且,如果您坚持使用like
匹配器,则需要遍历列表并动态生成查询。
另一个选择是在HQL中实际使用IN
子句,但是这将使通配符匹配变得不可能。
from movies m where m.name in (:keywords)
Query qry = session.createQuery("From RegistrationBean as rb where rb."+searchCriteria+" like :sf");
qry.setString("sf",'%'+searchField+'%');
我不仅需要执行此操作,还需要在Spring Data的@Query
注释中执行此操作。 这是我得到它的唯一方法。 (请记住,这是在界面中。)
@Query(value="from Movie h where lower(h.name) like concat('%',lower(:term),'%'")
List<Movie> findLike(@Param("term") String term);
我将对lower()
的调用设为不区分大小写,然后使用concat()
函数添加%字符。 当我这样写时它没有用:
@Query(value="from Movie h where lower(h.name) like lower(%:term%)")
List<Movie> findLike(@Param("term") String term); // Query doesn't work! Use concat()
没有区分大小写,它甚至没有这样工作:
@Query(value="from Movie h where h.name like %:term%")
List<Movie> findLike(@Param("term") String term); // Query doesn't work! Use concat()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.