2016-07-12 5 views
0

고려 다음스프링 데이터 JPA는 - 여러 OR 절

interface TicketRepository extends JpaRepository<Ticket, Integer> { 
    List<Ticket> findByOpenDateBetweenOrCloseDateBetweenAndPersonIdAndType(Timestamp start1, Timestamp end1, Timestamp start2, Timestamp end2, Integer personId, TicketType type) 
} 

다음 SQL이 생성됩니다

select 
    ticket0_.id as id1_10_, 
    ticket0_.close_date as close_da2_10_, 
    ticket0_.complaint as complain3_10_, 
    ticket0_.connection_id as connecti4_10_, 
    ticket0_.district_id as district5_10_, 
    ticket0_.open_date as open_dat6_10_, 
    ticket0_.person_id as person_i7_10_, 
    ticket0_.public_id as public_i8_10_, 
    ticket0_.ticket_queues_id as ticket_q9_10_, 
    ticket0_.ticket_statuses_id as ticket_10_10_, 
    ticket0_.ticket_types_id as ticket_11_10_, 
    ticket0_.users_id as users_i12_10_ 
from 
    ticket_tickets ticket0_ 
left outer join 
    ticket_types tickettype1_ 
     on ticket0_.ticket_types_id=tickettype1_.id 
where 
    ticket0_.open_date between ? and ? 
    or (
     ticket0_.close_date between ? and ? 
    ) 
    and ticket0_.person_id=? 
    and tickettype1_.id=? 

내가 필요로하는 것은 모두 BETWEENs는 다음과 같이, 같은 괄호 안에 있다는 것입니다 :

(ticket0_.open_date between ? and ? OR ticket0_.close_date between ? and ?) 

난 그냥 메소드 이름을 변경하거나 내가 사용자 지정을해야하여이 작업을 수행 할 수있는 방법이 있나요 @Que 접근 방식?

답변

1

@ 쿼리 접근 방식을 사용하십시오. 훨씬 더 간단합니다. 쿼리 빌더 메커니즘은 간단한 쿼리를 작성하는 데 사용해야합니다. 또한 코드의 가독성을 높일 수 있습니다.

+0

내가 이것을 끝내기 때문에 이것을 답변으로 표시합니다 ... 그러나 우리 쿼리에서 OR 절을 제어하는 ​​방법을 아는 것은 여전히 ​​흥미로울 것입니다 ... "findBy (ThisOrThis) 그리고 그 " –

+0

고마워! 나는 대답하기 전에 많은 검색을했고, 3 개의 선택적 매개 변수를 검색해야했던 하나의 쿼리와 비슷한 문제가 있다고 말할 수 있습니다. 나는 모든 자습서와 내가 찾을 수있는 문서화를 적색으로하고 심지어 책에서 검색을하지만 나는 이것을하는 법을 결코 알지 못한다. 나는 쿼리 빌더 메커니즘이 스프링 문서에서 찾은 것과 같은 간단한 쿼리를 작성하기 위해 개발되었다고 생각한다. http://docs.spring.io/spring-data/jpa/docs/1.4.3.RELEASE/reference/ html/repositories.html – amicoderozer

관련 문제