繁体   English   中英

有没有办法在HQL中执行此查询?

[英]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

查询时,您需要传递命名参数keyword1keyword2

而且,如果您坚持使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM