Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Hibernate TypeResolver

I'm aware that hibernate recently redid its type system in 3.6. I think this now allows you do associate a java Class with a Type (or UserType). For example I use joda-time and have a couple of UserTypes that map the LocalDate and LocalDateTime into appropriate SQL types.

This works fine when working with objects but if I want to pass a joda type as a HQL parameter hibernate gets confused so I have to remember to supply the Type each time I make a call.

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

I think it is now possible during the Configuration/SessionFactory setup phase to say LocalDateTime -> LocalDatetimeType but I'm not sure how to do this. I found the TypeResolver but had trouble deciphering which method I should be calling to achieve this.

Or please correct me if this is not possible even with the new type stuff in 3.6.

like image 478
Mike Q Avatar asked Jan 18 '11 15:01

Mike Q


1 Answers

Answering my own question.

Simple enough when you know how.

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

The TypeResolver lookups for unknown types use the class name so registering the full name of the class as the registrationKey does the job.

like image 51
Mike Q Avatar answered Nov 06 '22 14:11

Mike Q