2012-04-28 3 views
2

Одна из таблиц Oracle выглядит так, что я не имею возможность изменить это:Oracle DATE и Hibernate/отображение JPA

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()); 

из положить СОП является 2012-02-01 - Обратите внимание на автоматическое преобразование значения в дБ 01-февралем-12

Теперь, если я запрос непосредственно по дате с использованием '01 - февраль-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-февраль-12 очень ценятся.

+0

Вы уверены, что формат, который вы используете правильно проанализировать строку до 'Date'? Можете ли вы попробовать 'DateFormat df = new SimpleDateFormat (« yyyy-MM-dd »);'? –

+0

@ βнɛƨн Ǥʋяʋиɢ - Нет, я на самом деле тоже пытался это сделать раньше, но не работает. Как ни странно, Hibernate не сообщает никаких ошибок, только никаких результатов. – SRK

+0

Можете ли вы дать нам запрос ('NamedQuery' или запрос Critera или что-то, что вы используете.) Я думаю, что ошибка/проблема находится в запросе или в методе findByReportDate – esej

ответ

2

Я думаю, что есть некоторое явное преобразование формата даты, получая результат в сообщенииPeriodRepository.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"))