jpa查询的日期后面有“.0”

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jpa查询的日期后面有“.0”相关的知识,希望对你有一定的参考价值。

数据库mysql
该字段的get方法: @Column(name = "OPER_DATE", length = 19) public Timestamp getOperDate() return this.operDate;

参考技术A 每次自己测试时候都是跨天测试的,结果是有数据,但是不是这天的数据,而是昨天的数据,这是由于使用的Jpa ——hibernate 实现,同步数据库的,JAP的时间格式使用SimpleDateFormat("yyyy-MM-dd")个格式之后,还是在数据库中“yyyy-MM-dd HH:mm:ss”保存的,后来改成前台代码以“yyyy-MM-dd”字符串格式传入,后台做一下处理。追问

是必须取出值后,格式化一下么?

参考技术B jpa查询datetime类型的字段,查询出来多个.0,解决办法可以在查询sql中进行转换,DATE_FORMAT(create_date,'%Y-%m-%d %H:%i:%s')本回答被提问者采纳 参考技术C 第一个应该是类属性的字符串(直接在类里copy),第二个就是值,我记得是这么用的 参考技术D DX4J1NMBDTC0 的查询结果 产品型号

JPA Query By Example (QBE) 不支持日期查询

JPA Query By Example (QBE) 不支持日期查询

文章目录

一. 先说结论

Query By Example(下文统称QBE)

只支持字符串类型的Example查询, 如果要加另外的例如日期类型的查询, 需要通过构建额外的Specification来实现

1.1 在原有的repo上继承JpaSpecificationExecutor

public interface TranxlogRepository extends JpaRepository<Tranxlog, Long>, JpaSpecificationExecutor<Tranxlog> 

1.2 构建Specification

public Specification<TranxLog> getSpecFromDatesAndExample(
  LocalDateTime from, LocalDateTime to, Example<TranxLog> example) 
    return (root, query, builder) -> 
         final List<Predicate> predicates = new ArrayList<>();
         if (from != null) 
            predicates.add(builder.greaterThan(root.get("dateField"), from));
         
         if (to != null) 
            predicates.add(builder.lessThan(root.get("dateField"), to));
         
         predicates.add(QueryByExamplePredicateBuilder.getPredicate(root, builder, example));
         return builder.and(predicates.toArray(new Predicate[predicates.size()]));
    
;

1.3 调用repo.findAll方法时传入Specification

public Page<TranxLog> findAllByConditions(TranxReportFormModel formModel, Pageable page) 
    ExampleMatcher matcher = ExampleMatcher.matching()
            .withNullHandler(ExampleMatcher.NullHandler.IGNORE)
            .withStringMatcher(ExampleMatcher.StringMatcher.CONTAINING)
            .withIgnoreCase()
            .withIgnoreNullValues();
    Example<TranxLog> example = Example.of(formModel.getTranxLog(), matcher);
    return tranxlogRepository.findAll(getSpecFromDatesAndExample(from, to, Example.of(formModel.getTranxLog(), matcher)), page);

二. 问题描述

QBE是JPA给我们提供的一个通过样例查询的方式, 我们可以通过构建一个 entity “案例”, 然后JPA会通过这个entity存在的字段为我们构建查询.

下图为JpaRepository提供的Example查询方法定义

但是通过查看ExampleMatcher源码发现只有StringMatcher一种实现, 这意味着我们只能对一些字符类型的列进行模糊匹配或者全匹配(也支持REGEX形式的匹配).

如果要对日期类型进行比较则不支持, 需要我们手动构建一个包含Example查询的Specification(详情参照上文, 不赘述)

参考资料

以上是关于jpa查询的日期后面有“.0”的主要内容,如果未能解决你的问题,请参考以下文章

根据当前日期+时间查询 JPA 实体以获取实例的最佳方法是啥?

如何在 JPA 查询中将日期时间转换为日期

使用日期参数时的 Spring Data JPA 日期“之间”查询问题

Spring Data JPA - 查询日期减去 2 天不起作用

Spring Data JPA如何传递日期参数

用 JPA 比较两个日期