2011-01-18 7 views
15

Mam świadomość, że hibernacja ostatnio zmieniła swój system typów w 3.6. Myślę, że teraz pozwala powiązać klasę java z typem (lub typem użytkownika). Na przykład używam joda-time i mam kilka UserTypes, które mapują LocalDate i LocalDateTime na odpowiednie typy SQL.Hibernate TypeResolver

Działa to dobrze podczas pracy z obiektami, ale jeśli chcę przekazać typ jody jako parametr HQL, hibernacja zostaje pomieszana, więc muszę pamiętać, aby podać typ za każdym razem, gdy wykonuję połączenie.

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

myślę, że teraz jest to możliwe podczas fazy konfiguracji/ustawień SessionFactory powiedzieć LocalDateTime -> LocalDatetimeType ale nie jestem pewien, jak to zrobić. Znalazłem TypeResolver, ale miałem problem z rozszyfrowaniem, którą metodę powinienem wywołać, aby to osiągnąć.

Lub proszę mnie poprawić, jeśli nie jest to możliwe, nawet z nowym materiałem w wersji 3.6.

Odpowiedz

10

Odpowiadając na moje własne pytanie.

Wystarczająco proste, gdy wiesz jak.

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

W wyszukiwań TypeResolver dla nieznanych typów użyć nazwy klasy więc rejestracji pełną nazwę klasy jako registrationKey spełnia swoje zadanie.