2014-01-15 1 views
1

Basicaly, 문장에 특정 단어가 있는지 찾는 것처럼 비슷합니다. 엔티티 포스트가 : 나는 그들의 title 필드 (인수로 전달 byTitle) 특정 단어/문자열이 Post 엔티티 인스턴스를 검색합니다 JPQL 쿼리 및 두 개 이상의 인수를 구현하기 위해 노력하고엔티티의 필드 중 하나에 단어/문자열이 포함되어 있는지 검색하기위한 JPQL 쿼리

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; 
     ...} 

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) 기능은 자바가 처럼, JPQL 유사한 있나요? 또는 Criteria API? 비교를 위해 대소 문자를 구분할 필요가 없습니다.

WHERE (p.title LIKE :firstWord OR ... OR p.title LIKE :lastWord) AND p.date >= :startDate AND p.date <= :endDate 

다음 매개 변수를 설정 :

답변

3

:

SELECT p FROM Post p WHERE 
     p.title LIKE :pattern AND 
       p.date>=:startDate AND 
        p.date<=:endDate 

.

0

는 당신이 OR로 연결된 여러 LIKE 절을 사용해야합니다 생각

query.setParameter("firstWord", '%' + firstWord + '%'); 
... 
query.setParameter("lastWord", '%' + lastWord + '%'); 

을하지만 쿼리 속도가 느려질 수 있습니다. Hibernate Search과 같은 전용 텍스트 검색 도구를 사용해보십시오. 나는 패턴의 발현와 결합 JPQL LIKE를 사용하여 구현 한