JPQL查询,用于搜索单词/字符串是否包含在实体的字段之一中

Vla*_*mir 4 java jpa jpql java-ee

基本上,它类似于查找句子中是否存在某些单词。有实体帖子:

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;
        ...}
Run Code Online (Sandbox Code Playgroud)

我正在尝试实现JPQL查询,该查询将搜索Post实体实例,这些实体实例byTitle在其title字段中具有某些单词/字符串(作为参数传递),以及两个以上Date类型的参数,分别代表日期范围- startDateendDate

我心里有这样的事情: 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?

编辑: 就像someString.contains(someSubstring)Java中有函数一样,JPQL中有类似的东西吗?还是Criteria API?为了进行比较,它不必区分大小写。

Vla*_*mir 5

我已经使用JPQL LIKE和模式表达式配对实现了它:

SELECT p FROM Post p WHERE 
       p.title LIKE :pattern AND 
               p.date>=:startDate AND 
                     p.date<=:endDate
Run Code Online (Sandbox Code Playgroud)

在哪里pattern = "%" + someString + "%"