2011-01-18 18 views
15

Sono consapevole che Hibernate ha recentemente ripristinato il suo sistema di tipi in 3.6. Penso che questo ora ti permette di associare una classe java con un Type (o UserType). Ad esempio, utilizzo joda-time e ho un paio di UserTypes che mappano LocalDate e LocalDateTime in tipi SQL appropriati.Hibernate TypeResolver

Questo funziona correttamente quando si lavora con oggetti, ma se voglio passare un tipo di joda come parametro HQL, la sospensione viene confusa, quindi devo ricordare di fornire il tipo ogni volta che effettuo una chiamata.

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

Penso che sia ora possibile durante la fase di setup di configurazione/SessionFactory dire LocalDateTime -> LocalDatetimeType, ma non sono sicuro di come fare questo. Ho trovato il TypeResolver ma ho avuto problemi a decifrare quale metodo dovrei chiamare per raggiungere questo obiettivo.

Oppure correggimi se questo non è possibile anche con il nuovo tipo di materiale in 3.6.

risposta

10

Rispondere alla mia domanda.

Abbastanza semplice quando si sa come.

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

Le ricerche TypeResolver per i tipi sconosciuti utilizzano il nome della classe in modo da registrare il nome completo della classe come il registrationKey fa il lavoro.