Spring 数据 JPA - 多个 OR 子句

Spring Data JPA - multiple OR clauses

考虑以下几点:

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 方法?

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