我知道 hibernate 最近在 3.6 中重做了它的类型系统。我认为这现在允许您将 java 类与类型(或用户类型)相关联。例如,我使用 joda-time 并有几个将 LocalDate 和 LocalDateTime 映射到适当的 SQL 类型的 UserType。
这在处理对象时工作正常,但如果我想将 joda 类型作为 HQL 参数传递,hibernate 会感到困惑,所以我必须记住每次调用时都提供类型。
query.setParameter( "now", new LocalDateTime(), Hibernate.custom( LocalDateTimeType.class ) );
我认为现在可以在 Configuration/SessionFactory 设置阶段说 LocalDateTime -> LocalDatetimeType 但我不确定如何执行此操作。我找到了 TypeResolver,但无法破译我应该调用哪个方法来实现此目的。
或者即使使用 3.6 中的新类型也无法做到这一点,请纠正我。
最佳答案
回答我自己的问题。
当你知道怎么做时就足够简单了。
configuration.getTypeResolver().registerTypeOverride( LocalDateTimeType.TYPE, new String[]{ LocalDateTime.class.getName() } );
configuration.getTypeResolver().registerTypeOverride( LocalDateType.TYPE, new String[]{ LocalDate.class.getName() } );
未知类型的 TypeResolver 查找使用类名,因此将类的全名注册为 registrationKey 即可。
关于java - Hibernate 类型解析器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4725719/