Hibernate TypeResolver - PullRequest
       7

Hibernate TypeResolver

15 голосов
/ 18 января 2011

Мне известно, что hibernate недавно переделал свою систему типов в 3.6.Я думаю, что теперь это позволяет вам связать Java-класс с типом (или UserType).Например, я использую joda-time и у меня есть пара UserTypes, которые отображают LocalDate и LocalDateTime в соответствующие типы SQL.

Это прекрасно работает при работе с объектами, но если я хочу передать тип joda в качестве параметра HQLhibernate сбивается с толку, поэтому я должен не забывать указывать тип при каждом вызове.

query.setParameter( "now", new LocalDateTime(), Hibernate.custom( LocalDateTimeType.class ) );

Я думаю, что теперь возможно на этапе настройки Configuration / SessionFactory сказать LocalDateTime -> LocalDatetimeType, но я 'Я не уверен, как это сделать.Я нашел TypeResolver, но у меня возникли проблемы с расшифровкой того, какой метод мне следует вызывать, чтобы добиться этого.

Или, пожалуйста, исправьте меня, если это невозможно, даже с новым типом в 3.6.

1 Ответ

10 голосов
/ 26 января 2011

Отвечая на мой вопрос.

Достаточно просто, когда знаешь как.

configuration.getTypeResolver().registerTypeOverride( LocalDateTimeType.TYPE, new String[]{ LocalDateTime.class.getName() } );
configuration.getTypeResolver().registerTypeOverride( LocalDateType.TYPE, new String[]{ LocalDate.class.getName() } );

В поисках TypeResolver для неизвестных типов используется имя класса, поэтому регистрация полного имени класса выполняется в качестве ключа регистрации.

...