当前日期的时间戳字段上的spring data jpa?

时间:2019-02-22 19:58:20

标签: spring-boot jpa spring-data-jpa jpql

我必须在时间戳字段中查询当前日期,并且仅获得1条记录。 我可以这样写查询:

@Query("Select i From Log i Where i.createdBy = :userId And DATE(i.createdDate) = CURRENT_DATE")

JPA实体:

@Entity
@Table(name = "log")
public class Log {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "log_id")
    private Long logId;

    @Column(name = "address")
    private String address;

    @Column(name = "created_date", updatable = false)
    @Temporal(TemporalType.TIMESTAMP)
    @DateTimeFormat(style = "yyyy-MM-dd HH:mm:ss")
    private Calendar createdDate;

    //SETTERS AND GETTERS
}   

CREATE TABLE `log` (
    `log_id` BIGINT(20) NOT NULL AUTO_INCREMENT,
    `address` VARCHAR(30) NOT NULL,
    `created_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    PRIMARY KEY (`log_id`)
)
ENGINE=InnoDB
;

在这里我无法限制记录, 我知道我们可以通过发送Pageable来限制记录,但是同样,我必须从列表中获取记录。

有什么办法可以做到这一点? 如何在spring data jpa方法名称中做到这一点?

1 个答案:

答案 0 :(得分:0)

您可以使用Spring Data存储库执行以下操作:

public interface LogRepository extends JpaRepository<Log, Long> {

  // just get one or null
  Log findOneByCreatedByAndCreatedDate(Instant createdBy, Instant createdDate);

  // get all, but pagable
  List<Log> findAllByCreatedByAndCreatedDate(Instant createdBy, Instant createdDate, Pageable pageable);

}

我假设您使用Instant作为时间戳记,但这也适用于其他Java 8日期类型或旧的Date类。

您现在可以在业务逻辑中致电:

Log log = logRepository.findOneByCreatedByAndCreatedDate(YOUR_TIMESTAMP, Instant.now());

// or
Log allLogs = logRepository.findOneByCreatedByAndCreatedDate(YOUR_TIMESTAMP, Instant.now(), PageRequest.of(0, 50));