2010-11-03 4 views
1

Как я могу указать Hibernate для сопоставления даты Java с столбцом Oracle DATE с использованием часового пояса, отличного от местного часового пояса?Как настроить Hibernate для сопоставления даты Java с столбцом Oracle DATE с использованием часового пояса, отличного от местного часового пояса?

ответ

1

Я не уверен, но я думаю, что вам нужно будет использовать метод OracleConnection.setSessionTimeZone(String regionName) для установки часового пояса сеанса.

Чтобы сделать это на OracleConnection, прежде чем иметь с ним Hibernate, самым чистым способом было бы обеспечить и использовать пользовательскую реализацию o.h.c.ConnectionProvider.

См. Это related question.

+0

Возможно, я просто нормализую дату до целевого часового пояса, прежде чем передавать ее в Hibernate для хранения в таблице. –

+0

@Derek Звуки проще. –

+0

Паскаль, JDBC переводит часовой пояс JVM в часовой пояс базы данных? Я просто задал этот вопрос по адресу http://stackoverflow.com/questions/4123534/before-writing-a-java-date-to-an-sql-timestamp-column-does-jdbc-translate-the-da. –

0

Hibernate не позволяет указывать часовые пояса по аннотации или любым другим способом. Если вы используете календарь вместо даты, вы можете реализовать обходное решение с использованием свойства HIbernate AccessType и реализовать само отображение. Более продвинутое решение заключается в реализации пользовательского UserType для сопоставления даты или календаря. Оба решения объясняются в этом сообщении в блоге: http://dev-metal.blogspot.com/2010/11/mapping-dates-and-time-zones-with.html

+0

Joobik, в вашей статье вы утверждаете, что Hibernate переводит часовой пояс данной даты: «Итак, что делает Hibernate, использует расписание часового пояса своего JVM (которое работает в CET) для преобразования независимого от часового пояса java.util .Данная к строкой даты в конкретном часовом поясе в нашей записи БД. Поскольку CET - на час раньше GMT, в нашу дату DB добавлен один час ». Однако, согласно http://stackoverflow.com/questions/4123534/before-writing-a-java-date-to-an-sql-timestamp-column-does-jdbc-translate-the-da/4124620#4124620, это драйвер JDBC, который переводит часовой пояс, а не Hibernate. –

Смежные вопросы