我必须在时间戳字段中查询当前日期,并且仅获得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方法名称中做到这一点?
答案 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));