Это должно прекрасно работать с TemporalType.TIMESTAMP и типом столбца базы данных DATETIME. Возможно, вы проверяете тип для неправильного столбца: в отображениях у вас есть «DATE_CREATED» и в определении столбца «date_opening».
Вы также спросили, почему нет TemporalType.DATETIME. Причина заключается в том, что значения TemporalType имеют однозначное сопоставление с временными типами JDBC в java.sql. [DATE / TIME / TIMESTAMP], в конце JPA должны играть вместе с JDBC.
Я тестировал со следующим кодом (env: EclipseLink 2.3.0, Connector / J 5.1.6, MySQL 5.1):
Entity / отображение:
@Entity
public class SomeEntity {
@Id
private int id;
@Column(name="DATE_CREATED")
@Temporal(TemporalType.TIMESTAMP)
private java.util.Date dateCreated;
public SomeEntity(int id, Date dateCreated) {
this.id = id;
this.dateCreated = dateCreated;
}
public SomeEntity() {
}
}
Определение таблицы:
CREATE TABLE `test`.`SOMEENTITY` (
`ID` int(11) NOT NULL,
`DATE_CREATED` datetime DEFAULT NULL,
PRIMARY KEY (`ID`)
) ENGINE=innoDB DEFAULT CHARSET=utf8
Тест:
java.util.Date now = new Date();
SomeEntity se = new SomeEntity(1, now);
em.persist(se);
Работает как положено, также временная часть DATE_CREATED имеет правильное значение. Если несоответствие между столбцами не было проблемой, возможно, вы также можете проверить это и сообщить результаты, а также версии MySQL и библиотеки.