【问题标题】:Spring Data JPA Fetching data based on a timestamp columnSpring Data JPA 基于时间戳列获取数据
【发布时间】:2017-10-05 07:22:36
【问题描述】:

如何在具有时间戳类型的列上使用 Spring Data JPA 从表中检索数据。数据库是 mySQL

列定义

last_update timestamp

领域对象

public class Film implements Serializable {
    @Column(name="last_update")
    private Timestamp lastUpdate;

    public Timestamp getLastUpdate() {
        return this.lastUpdate;
    }

    public void setLastUpdate(Timestamp lastUpdate) {
        this.lastUpdate = lastUpdate;
    }
}

Spring Data JPA 代码

@Repository                                                        
public interface FilmRepository extends CrudRepository<Film, Integer> 
{
    Film findByLastUpdate(Date date);
}

服务类

@Override
public Film readFilmbyDate(){
    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
    Film film=null;
    try {
        film= filmRepository.findByLastUpdate(sdf.parse(sdf.format(new Date())));
    } catch (ParseException e) {
        e.printStackTrace();
    }
    return film;
}

这总是返回null,因为数据库列有一个timestamp(2017-05-07 06:45:19),基本上我想返回所有最后更新日期为今天/当前日期的记录。

【问题讨论】:

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


    【解决方案1】:

    将您的方法更改为findByLastUpdateBetween(Date date, Date after) 并传入您要查找的日期的开头和结尾。如果您使用的是 java 8,您可以添加一个默认方法来从一个输入日期创建日期并调用 findLastUpdateBetween,否则,您可以使用 custom implementation

    【讨论】:

    • 感谢 Jens,它起作用了,我认为这是时间戳列的唯一方法,我不能直接使用 equal
    • 有了时间戳,你必须使用范围查询。如果读取性能很关键,您可以引入一个额外的日期列,可能由功能索引支持(不知道 MySQL 是否有类似的东西)
    猜你喜欢
    • 2019-03-17
    • 2020-01-23
    • 2013-03-07
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    相关资源
    最近更新 更多