Как заставить Hibernate возвращать даты как java.util.Date вместо Timestamp?

Ситуация:

У меня есть сохраняемый класс с переменной типа java.util.Date:

import java.util.Date;

@Entity
@Table(name = "prd_period")
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
public class Period extends ManagedEntity implements Interval {

   @Column(name = "startdate_", nullable = false)
   private Date startDate;

}

Соответствующая таблица в БД:

CREATE TABLE 'prd_period' (
  'id_' bigint(20) NOT NULL AUTO_INCREMENT,
 ...
  'startdate_' datetime NOT NULL
)

Затем я сохраняю свой объект Period в БД:

Period p = new Period();
Date d = new Date();
p.setStartDate();
myDao.save(p);

После этого, если я пытаюсь извлечь свой объект из БД, он возвращается с переменной startDate типа Timestamp - и все места, где я пытаюсь использовать equals(...), возвращают false.

Вопрос: есть ли способ заставить Hibernate возвращать даты как объект типа java.util.Date вместо Timestamp без явного изменения каждой такой переменной (например, он должен просто работать, без явного изменения существовали переменные типа java.util.Date)?

ПРИМЕЧАНИЕ:

Я нашел ряд явных решений, где используются аннотации или модифицируется сеттер, но у меня много классов с Date-переменными, поэтому мне нужно какое-то централизованное решение, и все, что описано ниже, недостаточно хорошо:

  1. Использование аннотации @Type: — будет возвращен java.sql.Date

     @Column
    @Тип(тип="дата")
    частная дата startDate;
     
  2. Использование аннотации @Temporal(TemporalType.DATE) — будет возвращен java.sql.Date

     @Temporal(TemporalType.DATE)
    @Столбец (имя = «CREATION_DATE»)
    частная дата startDate;
     
  3. Путем изменения установщика (глубокая копия) - java.util.Будет возвращена дата

     public void setStartDate(Date startDate) {
    если (дата_начала!= ноль) {
    this.startDate = новая дата (startDate.getTime());
     } еще {
    this.startDate = ноль;
     }
    }
     
  4. При создании моего собственного типа: - будет возвращен java.util.Date

Подробности приведены здесь: http://blogs.sourceallies.com/2012/02/hibernate-date-vs-timestamp/

53
задан Michael Paesold 3 March 2012 в 12:39
поделиться