为什么将两个分别工作的JPQL查询组合在一起时不起作用?

时间:2019-07-07 05:50:33

标签: spring-boot spring-data-jpa

在使用休眠模式的spring-boot项目中,我想创建一个查询,该查询返回日期和ByMethodPaymentId之间具有日期的所有操作。 实体类:

    @Entity
    public class Action {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @JsonFormat(pattern = "yyyy-MM-dd")
    private Date date;

    @ManyToOne
    @JsonIgnore
    @Valid
    private MethodPayment methodPayment;
    //constructor....getter... setter...

要执行此操作的存储库

   @Repository
    public interface ActionRepository extends JpaRepository<Action, Long>{

    // Dont works
    Collection<Action> findByMethodPaymentIdAndByDateBetween(long methodPaymentId,Date startDate, Date endDate );
    // works    
    Collection<Action> findByMethodPaymentId(long methodPaymentId);
    // works
    Collection<Action> findByDateBetween(Date startDate, Date endDate);

为什么最后两个查询有效,而第一个查询却又两个无效?

2 个答案:

答案 0 :(得分:3)

使用By时不必再次提及JPQL,因此方法类似于

Collection<Action> findByMethodPaymentIdAndDateBetween(long methodPaymentId,Date startDate, Date endDate );

尝试一下。

答案 1 :(得分:2)

Remove之后By And

更改

findByMethodPaymentIdAndByDateBetween() 

收件人

findByMethodPaymentIdAndDateBetween()

最终查询

Collection<Action> findByMethodPaymentIdAndDateBetween(long methodPaymentId,Date startDate, Date endDate );

多个和/或

findByFirstParameterAndSecondeParameterORThirdParameter(...)