其中一个 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年2月1日 - 注意自动从数据库中的值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);
任何关于如何查询(使用 HQL 也可以)以 REPORTING_DATE 作为参数,当数据库中的值是 01-FEB-12 时,都将不胜感激。
select to_char(REPORTING_DATE, 'dd/mm/yyyy hh24:mi:ss') from IR_REPORTING_PERIOD
。 - A.B.Cade