Java 获得冬眠';s类型注册表

Java 获得冬眠';s类型注册表,java,hibernate,jpa,Java,Hibernate,Jpa,我编写了一个HibernateUserType,它在我的Java类和JDBCVARCHAR之间进行类型转换。我将我的bean注释如下: @TypeDef。。。 类MyClass{ @列(名称=“…”) @类型(Type=“MyPropertyType”) 私人财产; @列(名称=“…”) 私人日期; } 现在,用户可以通过命令行指定此属性和其他属性的条件。我想使用JPAsCriteriaBuilder将这些条件添加到查询中,例如: criteriaBuilder.equal(column, o

我编写了一个Hibernate
UserType
,它在我的Java类和JDBC
VARCHAR
之间进行类型转换。我将我的bean注释如下:

@TypeDef。。。
类MyClass{
@列(名称=“…”)
@类型(Type=“MyPropertyType”)
私人财产;
@列(名称=“…”)
私人日期;
}
现在,用户可以通过命令行指定此属性和其他属性的条件。我想使用JPAs
CriteriaBuilder
将这些条件添加到查询中,例如:

criteriaBuilder.equal(column, operand);
这样,Hibernate会抱怨
操作数
(作为字符串)与
MyProperty.class
不对应。Hibernate不会尝试自动转换类型(可能是因为它知道目标类型,并且它有我的注释,该注释指向实现
StringRepresentableType
的类型)。因此,我必须手动进行类型转换

  • 可以显式地告诉Hibernate尝试将字符串转换为目标类型吗?或者可以从Hibernate获取特定bean属性的类型实例吗
  • 在哪里可以获得Hibernate的
    TypeRegistry
    ,其中注册了
    MyPropertyType

    • 解决方案是创建第二个转换服务,将字符串转换为目标类型。我正在使用:

      Hibernate现在在如下条件下接受
      CastedPerand

      criteriaBuilder.equal(column, operand);
      
      这通常是有意义的,因为第一个转换工具(Hibernate)将在JDBC(例如
      VARCHAR
      )和Java类型之间转换,而第二个转换工具(Spring)将在用户输入(来自命令行或HTTP请求的字符串)和Java类型之间执行转换

      如果有办法将Hibernate的
      TypeRegistry
      中已经存在的转换器注入Spring的
      ConversionService
      中,包括那些实现的类,请留下评论

      criteriaBuilder.equal(column, operand);