有没有办法在 HQL 中执行此查询?
Is there any way to do this query in HQL?
我是 Hibernate 的新手,我正在 Java 中创建一个简单的电影查找器应用程序。我需要在我的 dao 中进行查询,以通过关键字列表搜索电影。我知道如何在 SQL 中执行此操作,但我想知道是否有任何方法可以通过 HQL 查询来执行此操作。 dao中的Java方法接收到一个List,它是keyowrds的列表,SQL语句是这样的:
SELECT *
FROM movies
WHERE name LIKE '%keyword1%' OR name LIKE 'keyword2' ...
因此,要实现这一点,有必要遍历所有列表并连接每个关键字的查询。
在 HQL 中可以使此查询更简单,因此您可以将关键字列表传递给查询,以便它可以与 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 数据中的 @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()
我是 Hibernate 的新手,我正在 Java 中创建一个简单的电影查找器应用程序。我需要在我的 dao 中进行查询,以通过关键字列表搜索电影。我知道如何在 SQL 中执行此操作,但我想知道是否有任何方法可以通过 HQL 查询来执行此操作。 dao中的Java方法接收到一个List,它是keyowrds的列表,SQL语句是这样的:
SELECT *
FROM movies
WHERE name LIKE '%keyword1%' OR name LIKE 'keyword2' ...
因此,要实现这一点,有必要遍历所有列表并连接每个关键字的查询。
在 HQL 中可以使此查询更简单,因此您可以将关键字列表传递给查询,以便它可以与 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 数据中的 @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()