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