Ответ 1
Это должно отлично работать с 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 и библиотеки.