其中一个 Oracle 表看起来像这样,我没有选择更改它的选项:
REPORTING_PERIOD | REPORTING_DATE (Oracle DATE type)
-------------------------------
1140 01-FEB-12
1139 01-JAN-12
JPA 实体(以 Hibernate 作为提供者)如下所示:
@Column(name="REPORTING_PERIOD")
private long reportingPeriod;
@Temporal( TemporalType.DATE)
@Column(name="REPORT_DATE")
private Date reportDate; //java.util.Date
现在,让我们进行单元测试:(我使用 Spring Data JPA 作为存储库)下面的行通过 REPORTING_PERIOD 列查询数据库
ReportingPeriod period1 = reportingPeriodRepository.findByMaxReportingPeriod();
assertNotNull(period1); // works fine and entity is fetched
System.out.println(period1.getReportDate());
SOP 的输出是2012-02-01 - 注意从 db 01-FEB-12中的值自动转换
现在,如果我使用“01-FEB-12”直接按日期查询,如下所示,我不会得到任何结果:
ReportingPeriod period2 = reportingPeriodRepository.findByReportDate(period1.getReportDate());
assertNotNull(period2);
请注意,我正在使用来自同一实体的日期字段,我可以在上一个语句中成功获取该字段。
这也不起作用:
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
ReportingPeriod period3 = reportingPeriodRepository.findByReportDate(df.parse("2012-02-01"));
assertNotNull(period3);
非常感谢当 db 中的值为 01-FEB-12 时,我如何通过 REPORTING_DATE 作为参数查询(使用 HQL 也可以)的任何帮助。