Hibernate TypeResolver - программирование
Подтвердить что ты не робот

Hibernate TypeResolver

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

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

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

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

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

4b9b3361

Ответ 1

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

Достаточно просто, когда вы знаете, как это сделать.

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

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