#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"));
}