【发布时间】:2019-10-10 23:27:13
【问题描述】:
我正在尝试从 mysql 数据库中检索今天的记录。
我尝试使用 springboot data-jpa 和 jpa-repository 中的 findByDate(Date date, Pageable pageable) 方法,它总是返回空结果。
这是创建的实体代码:
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name="id_synop")
private Long id;
@Column(name="contenu")
private String contenu;
@Column(name="date", columnDefinition="TIMESTAMP(0)")
@Temporal(TemporalType.TIMESTAMP)
private Date date;
@ManyToOne(cascade= {CascadeType.DETACH,CascadeType.MERGE,CascadeType.PERSIST,CascadeType.REFRESH},
fetch=FetchType.LAZY)
@JoinColumn(name="id_station")
@JsonIgnoreProperties({"hibernateLazyInitializer", "handler"})
private Station station;
这是使用 Mysql WorkBench 创建的 Mysql 表:
CREATE TABLE `synop` (
`id_synop` bigint(20) NOT NULL AUTO_INCREMENT,
`id_station` bigint(20) NOT NULL,
`contenu` varchar(255) NOT NULL,
`date` timestamp NOT NULL,
PRIMARY KEY (`id_synop`),
UNIQUE KEY `idmsgsynop_UNIQUE` (`id_synop`),
KEY `fk_synope_station_idx` (`id_station`),
CONSTRAINT `fk_synope_station` FOREIGN KEY (`id_station`) REFERENCES `station` (`id_station`)
) ENGINE=InnoDB AUTO_INCREMENT=25 DEFAULT CHARSET=utf8;
jpa 仓库代码:
import java.util.Date;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
public interface SynopRepository extends JpaRepository<Synop, Long> {
public Page<Synop> findByStationId(Long stationId, Pageable pageable);
public Page<Synop> findByDate(Date date, Pageable pageable);
}
和控制器代码:
@GetMapping("/synops-today")
public Page<Synop> findToday(@RequestParam(defaultValue="1") int page,Pageable pageable) {
return synopRepository.findByDate(new Date(),PageRequest.of(page-1, 10, Sort.by("date").ascending()));
}
我希望通过使用 findByDate(...) 方法来获取今天的记录,但它似乎不起作用。从 MysqlWorkbench 查看数据时,我还注意到一个小问题:日期似乎提前 2 小时(例如:现在是 11:57,但在 mysql Workbench 软件中它显示 9:57,当我查询服务器时间时,它显示了正确的时间...) 我实际上并不关心我只想检索今天的记录的小时/分钟/秒。
【问题讨论】:
-
你在使用mysql方言吗?
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.MySQL5Dialect -
尝试在您的 cntrlr 中将日期从 java.util.date 更改为 sql.date...
-
尝试#findByDateBetween(Date start, Date end, Pageable pageable),start 是今天的日期加上 00:00:00,end 是今天的日期加上 24:00:00。 “日期似乎提前了 2 小时”,可能是时区问题。
标签: java hibernate spring-boot spring-data-jpa