基本上,它类似于查看句子中是否存在某个单词。 有实体邮政:
public class Post implements Serializable {
@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "post_id", unique = true, nullable = false)
private Integer id;
@Column(name = "post_title", length=300, unique = false, nullable = false)
private String title;
@Column(name = "post_date", unique = false, nullable = false)
private Date date;
...}
我正在尝试实现JPQL
查询,该查询将在Post
中搜索具有特定字/字符串(byTitle
,作为参数传递)的title
实体实例字段以及Date
类型的另外两个参数,表示日期范围 - startDate
和endDate
。
我脑子里有这样的事情:
SELECT p FROM Post p WHERE :byTitle IN (set of strings created from parsing p.title field) AND p.date>=:startDate AND p.date<=endDate
如何实现这种JPQL查询?或者也许应该使用JPA Criteria API?
修改
就像Java中有someString.contains(someSubstring)
函数一样,JPQL中有类似的东西吗?或Criteria API?为了进行比较,它不必区分大小写。
答案 0 :(得分:5)
我使用JPQL LIKE
与模式表达式配对实现了它:
SELECT p FROM Post p WHERE
p.title LIKE :pattern AND
p.date>=:startDate AND
p.date<=:endDate
其中pattern = "%" + someString + "%"
。
答案 1 :(得分:1)
我认为你必须使用OR连接的几个LIKE子句:
WHERE (p.title LIKE :firstWord OR ... OR p.title LIKE :lastWord) AND p.date >= :startDate AND p.date <= :endDate
然后设置参数:
query.setParameter("firstWord", '%' + firstWord + '%');
...
query.setParameter("lastWord", '%' + lastWord + '%');
但查询可能很慢。您可以考虑使用专用的全文搜索工具,例如Hibernate Search。