данные весны jpa на поле отметки времени для текущей даты? - PullRequest
0 голосов
/ 22 февраля 2019

Я должен запросить в поле отметки времени для текущей даты и получить только 1 запись.Я могу написать запрос как:

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

JPA Entity:

@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
}   

TABLE:

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, но опять же мне нужно получить запись из списка.

Есть ли способ сделать это?как мы можем сделать это весной data jpa method name?

1 Ответ

0 голосов
/ 22 февраля 2019

Вы можете использовать репозиторий 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));
...