【问题标题】:Crud Repository, date comparisonCrud Repository,日期比较
【发布时间】:2017-07-25 11:53:12
【问题描述】:

我有以下 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;}

我的页面

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)) (offset = 0 , limit = 100)

【问题讨论】:

  • 向我们展示您的实体类。
  • 感谢回复,我添加了洗涤和洗涤历史

标签: java date spring-boot


【解决方案1】:

您的问题是由使用错误的命名约定引起的:您的实体应如下所示:(删除了多余的行 - 如果您想添加非空等约束,请将它们添加到 @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对象中。

【讨论】:

  • 不,我的命名约定工作正常,但是当我将日期添加到我的方法时,它开始返回一个空列表
  • @АлмасАбдразак 试试我建议的方法。这是正确的。您可以向我们展示您的可分页功能。
  • 谢谢,但您的方法是 findAllByTimeBetween,但我只想选择两个日期之间具有特定wash_id 的wash_histories
  • @АлмасАбдразак 已更新 - 您的字段名称washId 导致方法中的 ID 需要加倍。
猜你喜欢
  • 2011-12-31
  • 2018-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-20
  • 2020-09-08
  • 2012-09-06
  • 2015-12-29
相关资源
最近更新 更多