2011-01-18 11 views
15

Soy consciente de que hibernate rehizo recientemente su sistema de tipos en 3.6. Creo que esto ahora te permite asociar una clase de Java con un tipo (o UserType). Por ejemplo, uso joda-time y tengo un par de UserTypes que mapean LocalDate y LocalDateTime en tipos de SQL apropiados.Hibernate TypeResolver

Esto funciona bien cuando se trabaja con objetos, pero si quiero pasar un tipo joda como un parámetro HQL hibernate se confunde, así que tengo que recordar suministrar el tipo cada vez que hago una llamada.

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

Creo que ahora es posible durante la fase de establecimiento de configuración/SessionFactory decir LocalDateTime -> LocalDatetimeType pero no estoy seguro de cómo hacer esto. Encontré TypeResolver pero tuve problemas para descifrar qué método debería llamar para lograrlo.

O por favor corrígeme si esto no es posible incluso con el nuevo tipo de cosas en 3.6.

Respuesta

10

Respondiendo a mi propia pregunta.

Bastante simple cuando sabes cómo.

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

Las búsquedas TypeResolver para tipos desconocidos utilizan el nombre de la clase de modo de registrar el nombre completo de la clase que el registrationKey hace el trabajo.