Сортировка с использованием временного столбца в Spring data JPA

#spring-boot #spring-data-jpa #spring-data #jpql #spring-repositories

Вопрос:

У меня есть таблица с именем Vist, в которой содержатся два столбца дат с именами «CreatedOn» и «updatedOn«.
Создано и обновлено в таблице посещений

Кроме того, я должен использовать столбец временной даты с именем «sharedOn«, и он будет получать значения по следующему условию.

ЕСЛИ значение updatedOn равно NULL, ТО sharedOn = CreatedOn. ЕЩЕ sharedOn = обновлеНо;

Я также должен сортировать данные по sharedOn.

Это SQL-запрос, который соответствует моим ожиданиям.

 SELECT *, ISNULL(updatedOn, createdOn) AS sharedOn FROM Visit ORDER BY sharedOn
 

Мне нужно получить вышеуказанный набор результатов, используя Spring data JPA. Как я могу это реализовать?

 package com.persistence.model.Visit;

import java.util.Date;

import javax.persistence.*;
import javax.validation.constraints.NotNull;

@Entity
@Table(name = "[Visit]")
public class Visit {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @NotNull
    private Long id;

    @Temporal(TemporalType.TIMESTAMP)
    private Date createdOn;
    
    @Temporal(TemporalType.TIMESTAMP)
    private Date updatedOn;

    // getters and setters       
}
 

 package com.persistence.repositories;

import java.util.Date;
import java.util.List;

import javax.transaction.Transactional;

import org.springframework.data.domain.Sort;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.query.Param;

import com.persistence.model.Visit;

public interface VisitRepository extends CrudRepository<Visit, Long> {

    @Query("SELECT V FROM Visit AS V WHERE V.identifierValue LIKE %:searchByIdentifier% " )
    List<Visit> getVisitByIndentifier(@Param("searchByIdentifier") String searchByIdentifier, Sort.by(Sort.Direction.ASC, "sharedOn"));
}