休眠类型解析器

2022-09-03 15:33:17

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

这在处理对象时工作正常,但是如果我想传递joda类型作为HQL参数休眠会感到困惑,所以我必须记住每次调用时都提供Type。

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

我认为现在在配置/会话工厂设置阶段可以说LocalDateTime -> LocalDatetimeType,但我不确定如何做到这一点。我找到了TypeResolver,但很难破译我应该调用哪种方法来实现这一目标。

或者,如果即使使用3.6中的新类型内容也不可能,请纠正我。


答案 1

回答我自己的问题。

当您知道如何操作时,就足够简单了。

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

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


答案 2