自定义谓词来处理自定义用户定义的类型(Hibernate UserType)
Custom like predicate to handle custom user defined types (Hibernate UserType)
我最近偶然发现了一个问题,我必须使用 like 谓词构建 JPA 条件,该条件接受作为 UserType
实现的自定义类型。我正在处理的自定义类型只不过是 String
包裹着一些额外的信息。
我已经通过从 Hibernate 实现 Criterion
接口来满足 Hibernate 标准,并且工作正常。
我现在必须为 JPA 做同样的事情,但是 Predicate
, the LikePredicate
的 Hibernates 实现是在调用时创建的:
CriteriaBuilderImpl.like(Expression< String >, String)
好像比较复杂
我需要的是:
...like(Expression< MyUserType >, MyUserType)
有没有人做过这样的事情,可以给我一些提示吗?
谢谢!
问题已通过辅助方法解决,其中 CustomString
是自定义 UserType
:
public static Predicate addLike(CriteriaBuilder cb, Path<CustomString> path, String val)
{
return cb.like(cb.lower(path.as(String.class)), val.toLowerCase());
}
我最近偶然发现了一个问题,我必须使用 like 谓词构建 JPA 条件,该条件接受作为 UserType
实现的自定义类型。我正在处理的自定义类型只不过是 String
包裹着一些额外的信息。
我已经通过从 Hibernate 实现 Criterion
接口来满足 Hibernate 标准,并且工作正常。
我现在必须为 JPA 做同样的事情,但是 Predicate
, the LikePredicate
的 Hibernates 实现是在调用时创建的:
CriteriaBuilderImpl.like(Expression< String >, String)
好像比较复杂
我需要的是:
...like(Expression< MyUserType >, MyUserType)
有没有人做过这样的事情,可以给我一些提示吗?
谢谢!
问题已通过辅助方法解决,其中 CustomString
是自定义 UserType
:
public static Predicate addLike(CriteriaBuilder cb, Path<CustomString> path, String val)
{
return cb.like(cb.lower(path.as(String.class)), val.toLowerCase());
}