Spring Data JPA - 多个OR子句

时间:2016-07-12 20:58:37

标签: hibernate spring-boot spring-data spring-data-jpa

请考虑以下事项:

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=?

我需要的是两个BETWEEN都在同一个括号中,如下所示:

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

我是否可以通过更改方法名称来实现此目的,或者我必须采用自定义@Query方法?

1 个答案:

答案 0 :(得分:1)

使用 @Query 方法。它简单得多。应使用查询构建器机制来编写简单查询。您还将提高代码的可读性。