2011-01-18 17 views
15

Tôi biết rằng hibernate gần đây đã redid hệ thống kiểu của nó trong 3.6. Tôi nghĩ rằng điều này bây giờ cho phép bạn kết hợp một lớp java với một Type (hoặc UserType). Ví dụ tôi sử dụng thời gian joda và có một vài UserTypes ánh xạ LocalDate và LocalDateTime vào các kiểu SQL thích hợp.Hibernate TypeResolver

Điều này làm việc tốt khi làm việc với các đối tượng nhưng nếu tôi muốn vượt qua một loại joda như một Hibernate Hibernate bị nhầm lẫn vì vậy tôi phải nhớ để cung cấp các loại mỗi khi tôi thực hiện cuộc gọi.

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

Tôi nghĩ rằng bây giờ có thể trong giai đoạn thiết lập cấu hình/SessionFactory để nói LocalDateTime -> LocalDatetimeType nhưng tôi không chắc chắn cách thực hiện việc này. Tôi tìm thấy TypeResolver nhưng gặp khó khăn khi giải mã phương pháp nào tôi nên gọi để đạt được điều này.

Hoặc vui lòng sửa tôi nếu điều này là không thể, ngay cả với công cụ loại mới trong 3.6.

Trả lời

10

Trả lời câu hỏi của riêng tôi.

Đủ đơn giản khi bạn biết cách thực hiện.

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

Tra cứu TypeResolver cho các loại không xác định sử dụng tên lớp để đăng ký tên đầy đủ của lớp như registrationKey thực hiện công việc.