2014-11-17 2 views
1

Я пытаюсь прочитать столбец «Дата окончания» из таблицы работ сотрудника через спящий режим. В столбце указан тип даты DATE. Значения null для сотрудников, не имеющих даты окончания.Как читать значение null из столбца Тип даты в hibernate

Проблема была в том, что когда я пытаюсь прочитать дату окончания нулевой даты, hibernate каким-то образом даст мне текущую дату в качестве ответа. Однако, если значение даты не равно null, hibernate будет читать правильную дату.

Мне было интересно, как предотвратить спящий режим от предоставления мне текущей даты вместо null, когда дата окончания равна нулю. Благодаря!

Ниже, как отображается колонка:

@Embedded 
@AttributeOverrides({@AttributeOverride(name = "terminationDate", column = @Column(name = Columns.TERMINATION_DT, nullable = true)) }) 
private PersonJob personJob; 
..... 
// PersonJob.java 
@Temporal(TemporalType.TIMESTAMP) 
private Calendar terminationDate; 
+0

Какую базу данных вы используете? – OO7

+0

@ OO7 Это база данных Oracle. – djin

+0

Что вы хотите сохранить в этом столбце 'DATE',' TIME' или 'DATE & TIME'? Какая версия ur Oracle? – OO7

ответ

0

Ваш столбец в базе данных имеет тип DATE & вы картирование его типа TemporalType.TIMESTAMP, который означает, что вы на самом деле отображение его java.sql.Timestamp.

Рекомендуется, чтобы, если у вас есть тип данных column with TIMESTAMP, то для успешного сопоставления в классе сущности вам необходимо сопоставить этот атрибут с java.sql.Timestamp.

С другой стороны, если столбец базы данных типа DATE, TIME или DATETIME, то вы можете сопоставить его java.util.Date, java.sql.Date или java.util.Calendar.

Но, java.util.Date магазины дата & время. Поэтому вы должны четко указать, что находится в вашей базе данных Date, TIME или both.

From Hibernate DOCs:

In plain Java APIs, the temporal precision of time is not defined. When dealing with 
temporal data you might want to describe the expected precision in database. Temporal 
data can have DATE, TIME, or TIMESTAMP precision (ie the actual date, only the time, 
or both). Use the @Temporal annotation to fine tune that. 

Вы можете посмотреть в спящем код проекта фрагмент TemporalTypeResolver.java.

Для MySQL:Here хорошее обсуждение DateTime & Timestamp данных.