一尘不染

Hibernate类型解析器

hibernate

我知道hibernate最近在3.6中重做了它的类型系统。我认为这现在允许您将Java类与类型(或UserType)相关联。例如,我使用joda-
time并具有几个UserType,它们将LocalDate和LocalDateTime映射到适当的SQL类型。

当使用对象时,这很好用,但是如果我想传递一个joda类型作为HQL参数,hibernate就会感到困惑,所以我必须记得每次打电话时都要提供Type。

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

我认为现在可以在Configuration / SessionFactory设置阶段说LocalDateTime->
LocalDatetimeType,但是我不确定如何执行此操作。我找到了TypeResolver,但是难以理解我应该调用哪种方法来实现此目的。

或者,即使使用3.6中的新类型内容也无法解决此问题,请纠正我。


阅读 210

收藏
2020-06-20

共1个答案

一尘不染

回答我自己的问题。

知道如何就足够简单。

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

未知类型的TypeResolver查找使用类名,因此在注册键完成该工作时注册类的全名。

2020-06-20