微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Spring Data JPA:仅按java.time.LocalDateTime列的日期部分排序

如何解决Spring Data JPA:仅按java.time.LocalDateTime列的日期部分排序

实体:

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import java.time.LocalDateTime;
import java.util.UUID;

@Table( name = "order" )
public class Order
{
    @Id
    @Column( name = "id",columnDeFinition = "BINARY(16)" )
    private UUID id;

    @Column( name = "posting_date" )
    private LocalDateTime postingDate;

    @Column( name = "created" )
    private LocalDateTime created;

}

使用排序org.springframework.data.jpa.repository.JpaSpecificationExecutor#findAll(org.springframework.data.jpa.domain.Specification<T>,org.springframework.data.domain.Pageable)进行搜索

由于特殊情况,我必须按两个字段进行排序:postingDatecreated并将postingDate视为日期(而不是像在实体中定义的datetime),但是我不这样做不知道如何。

要向MysqL DB发出这样的请求,应使用DATE()函数,如下所示:

select
        order.*
    from
        order o
    where
      ...
    order by
        date(o.posting_date) desc,o.pae_created desc

但是我想使用JPA方法进行搜索和排序。

问题:有什么方法可以告诉JPA该排序的那个列或该列应该包含一些函数?怎么做?

解决方法

从原则上讲这是可行的。我没有运行以下代码!此外,function关键字已添加到JPA 2.1中,如果您使用的是较早版本,则可能无法使用。

JPQL:

SELECT o FROM Order o WHERE ...
ORDER BY
  function('DATE',o.postingDate) DESC,o.created DESC

条件API也支持此功能。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。