Есть Hibernate 3 и Oracle 10.
При персистинге объекта типа java.util.Date хибернейт переводит его в строковое представление в текущей тайм зоне и полученную строку использует в sql для записи даты в таблицу.
При чтении даты происходит обратный процесс. Хибернейт считает, что дата в базе есть в текущей тайм зоне.
Всё бы нормально, но вот в моём случае дату пишет сервер в одной тайм зоне, а читает её клиент в другой тайм зоне. При этом дата 10:00 GMT+3, записанная сервером, будет прочитана клиентом как 10:00 GMT-10, т.е. даты будут разными.
Встречался ли кто с такой проблемой? Подчеркну, что использовать мне необходимо класс. java.util.Date. Более того надо, чтобы дата писалась в базу в UTC.
Здравствуйте, SegaMegaDrive, Вы писали:
SMD>Встречался ли кто с такой проблемой? Подчеркну, что использовать мне необходимо класс. java.util.Date. Более того надо, чтобы дата писалась в базу в UTC.
Для хранения даты можно использовать long или java.util.Calendar.
Здравствуйте, SegaMegaDrive, Вы писали:
SMD>Есть Hibernate 3 и Oracle 10. SMD>При персистинге объекта типа java.util.Date хибернейт переводит его в строковое представление в текущей тайм зоне и полученную строку использует в sql для записи даты в таблицу.
несколько странно слышать, что производится конвертация в строковое представление и подстановка строки
возможно, это связано именно с использованием java.util.Date — не знаю, ибо не сталкивался
а поле в БД какого типа? почему именно строка подставляется как параметр?
SMD>Встречался ли кто с такой проблемой? Подчеркну, что использовать мне необходимо класс. java.util.Date. Более того надо, чтобы дата писалась в базу в UTC.
используй java.sql.Date — с одной стороны он является потомком java.util.Date, т.е. прочитанный объект даты в конвертации нуждаться не будет, а организовать конвертацию в него можно через дополнительно написанный setter, поддерживающий именно java.util.Date