2017-07-25 24 views
1

我有以下SQL查詢:庫界面污物,日期比較

select * from wash_history w where w.wash_id in 
    (select wash.id from wash where wash.car_wash_id = 17) 
and w.time between '2017-07-13' and '2017-07-22' 

我想創建內部擴展CrudRepository接口此查詢。方法是

Page<WashHistory> findWashHistoryByTimeBetweenOrderByTimeDesc(Date dateFrom, 
                   Date dateTo, 
                   Pageable pageable); 

但是這個方法總是返回一個空的列表,我想是因爲Java日期和SQL TimeStamp?如果你想要更多的細節,我可以添加他們的問題。我的類:

public class WashHistory implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id") 
    private Integer id; 
    // @Max(value=?) @Min(value=?)//if you know range of your decimal fields consider using these annotations to enforce field validation 
    @Column(name = "wash_price") 
    private Double washPrice; 
    @Size(max = 2147483647) 
    @Column(name = "car_wash_name") 
    private String carWashName; 
    @Basic(optional = false) 
    @NotNull 
    @Column(name = "time") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date time; 
    @Size(max = 2147483647) 
    @Column(name = "status") 
    private String status; 
    @Column(name = "bonuses") 
    private Integer bonuses=0; 
    @JoinColumn(name = "wash_id", referencedColumnName = "id") 
    @ManyToOne(fetch = FetchType.LAZY) 
    private Wash washId;} 

和洗滌類

public class Wash implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    @Basic(optional = false) 
    @Column(name = "id") 
    private Integer id; 
    @Size(max = 2147483647) 
    @Column(name = "status") 
    private String status; 
    @Column(name = "using_bonuses") 
    private Boolean usingBonuses=false; 
    @Basic(optional = false) 
    @NotNull 
    @Column(name = "last_status_time") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date lastStatusTime; 
    @OneToMany(mappedBy = "washId", fetch = FetchType.LAZY) 
    private Set<WashHistory> washHistorySet; 
    @OneToOne(mappedBy = "washId", fetch = FetchType.LAZY) 
    private WashComment washCommentSet; 
    @JoinColumn(name = "car_wash_id", referencedColumnName = "id") 
    @ManyToOne(fetch = FetchType.LAZY) 
    private CarWash carWashId;} 

我pageble

public class LimitAndOffsetPageable extends PageRequest { 
     private int page; 
     private int size; 
     public LimitAndOffsetPageable(int page, int size){ 
      super(page,size); 
      this.page=page; 
      this.size=size; 
     } 
     @Override 
     public int getOffset(){ 
      return this.page; 
     } 
} 

我傳遞給findWashHistoryByTimeBetweenOrderByTimeDesc(new LimitAndOffsetPageable (0,100))(偏移= 0,限= 100)

+0

向我們展示您的實體類。 – xenteros

+1

感謝您的回覆,我添加洗滌和清洗歷史 –

回答

0

您的問題是引起通過使用錯誤的命名約定:您的實體應該如下所示:(刪除冗餘行 - 如果你wa NT中添加約束一樣不爲空,在@Column添加的話)

@Entity 
public class WashHistory implements Serializable { 

    private static final long serialVersionUID = 1L; 
    @Id 
    @GeneratedValue(strategy = GenerationType.IDENTITY) 
    private Integer id; 
    @Column(name = "wash_price") 
    private Double washPrice; 
    @Column(name = "car_wash_name") 
    private String carWashName; 
    @Column(name = "time") 
    @Temporal(TemporalType.TIMESTAMP) 
    private Date time; 
    private String status; 
    private Integer bonuses=0; 
    @JoinColumn(name = "wash_id", referencedColumnName = "id") 
    @ManyToOne(fetch = FetchType.LAZY) 
    private Wash wash; 
} 

現在,方法可以是:

Page<WashHistory> findAllByWashIdIdAndTimeBetween(Integer id, Date start, Date end, Pageable pageable) 

排序屬性應投入pageable對象。

+0

不,我的命名約定工作正常,但是當我添加日期到我的方法它開始返回一個空列表 –

+0

@АлмасАбдразак嘗試我建議的方法。這是正確的。您可以向我們展示您的可分頁內容。 – xenteros

+0

謝謝,但你的方法是findAllByTimeBetween,但我想只選擇具有特定wash_id的wash_histories,該日期在兩個日期之間 –