如何解决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)
进行搜索
由于特殊情况,我必须按两个字段进行排序:postingDate
和created
并将postingDate
视为日期(而不是像在实体中定义的datetime),但是我不这样做不知道如何。
要向MysqL DB发出这样的请求,应使用DATE()
函数,如下所示:
select
order.*
from
order o
where
...
order by
date(o.posting_date) desc,o.pae_created desc
问题:有什么方法可以告诉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 举报,一经查实,本站将立刻删除。