java - Oracle DATE 和 Hibernate/JPA 映射

标签 java oracle hibernate date spring-data-jpa

其中一个 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 - 注意从数据库 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 也可以)的任何帮助。

最佳答案

我认为在 reportingPeriodRepository.findByMaxReportingPeriod() 中获取结果时有一些明确的日期格式转换;

因此我们可以检查我们是否使用与数据库格式相同的格式获取数据

改变

DateFormat df = new SimpleDateFormat("yyyy-MM-dd"); 
ReportingPeriod period3 = reportingPeriodRepository.findByReportDate(df.parse("2012-02-01"))

DateFormat df = new SimpleDateFormat("dd-MMM-yy"); 
ReportingPeriod period3 = reportingPeriodRepository.findByReportDate(df.parse("01-FEB-12"))

关于java - Oracle DATE 和 Hibernate/JPA 映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10366014/

相关文章:

Java 字符串到日期的转换

甲骨文 | SUBSTR 函数不起作用

Oracle 11g - top N order by 很慢

java - 在 Java 中使用 Hibernate 的 DetachedCriteria 来限制结果的最佳方法是什么?

java - 如何动态地将对象添加到 Hibernate 查询中

java - IDEA IntelliJ 使用什么 Java GUI 库?

java - 使用 JNI 从 java 调用非静态方法到 c++

java - 以更具可读性的方式在 ArrayList 中添加元素

java - oracle数据库中表不存在则自动创建

java - Null Exception 从下拉列表中保存值