@Temporal (TemporalType.DATE) с Oracle 12
В нашей БД у нас есть несколько объектов с полями Date. Oracle видит каждую дату как одну и ту же, с датой и частью времени. Однако сущности JPA различаются с помощью аннотации @Temporal. Когда мы хотим пропустить часть времени, мы аннотируем поля Date с помощью @Temporal (TemporalType.DATE), а Oracle сохраняет 00:00:00, если нет, мы просто оставляем это без аннотации.
Пример:
@Entity
public class MyEntity implements Serializable {
private static final long serialVersionUID = 1L;
@Id
private long myentityId;
@Temporal(TemporalType.DATE)
private Date importantDate; //01.01.2015 00:00:00
private Date creationDate; //01.01.2015 10:35:51
...
}
...
MyEntity me = new MyEntity();
me.setImportantDate(new Date());
me.setCreationDate(new Date());
...
Мы обновили с Oracle 11 до Oracle 12 и теперь часть времениimportantDate больше не опускается!
Я тщательно протестировал обе базы данных с помощью одной и той же программы. Это на самом деле нарушает наше приложение.
Что я могу сделать, чтобы восстановить предыдущее поведение?
ОБНОВЛЕНИЕ 1: Я сузил проблему: драйвер ojdbc6 12.1.0.1.0 имеет проблему, ojdbc6 11.2.0.3.0 работает как задумано. (оба используют БД Oracle 12)
Является ли это продолжением проблемы с отметкой времени, исправленной в 11.1? (http://www.oracle.com/technetwork/database/enterprise-edition/jdbc-faq-090281.html#08_01)
ОБНОВЛЕНИЕ 2: Поскольку Hibernate, похоже, не является проблемой, я написал пример с чистым JDBC:
OracleDataSource ods = new OracleDataSource();
...
Connection conn = ods.getConnection();
PreparedStatement ps = conn.prepareStatement("UPDATE MyEntity SET importantDate = ? WHERE myentityId = 4385");
ps.setDate(1, new java.sql.Date(new java.util.Date().getTime()));
ps.execute();
...
Этот фрагмент ведет себя по-разному при переключении между ojdbc6 11.1 и ojdbc6 12.1.