为具有Enum列的实体创建搜索规范



我有一个带有Enum列的实体:

@Enumerated(EnumType.STRING)
@Column(name = "status", length = 20)
private OnboardingTaskStatus status;

枚举声明如下:

public enum OnboardingTaskStatus {
NEW,
IN_PROGRESS,
DISABLED;
}

我试图实现一个搜索规范:

Specification<OnboardingTasks> spec = (root, query, cb) -> {
List<Predicate> predicates = new ArrayList<>();
if (params.getTitle() != null) {
predicates.add(cb.like(cb.lower(root.get("title")), "%" + params.getTitle().toLowerCase() + "%"));
}
if (params.getStatus() != null) {
predicates.add(cb.equal(root.get("status"), params.getStatus()));
}
return cb.and(predicates.toArray(new Predicate[predicates.size()]));
};
return onboardingTasksService
.findAll(spec, pageable)
.map(onboardingMapper::taskToTaskDTO);

我得到一个错误:

OnboardingTaskStatus.2769df0841;嵌套异常是java.lang.IllegalArgumentException: No enum constant OnboardingTaskStatus。[2769df0841]与根本原因java.lang.IllegalArgumentException: No enum constant OnboardingTaskStatus.2769df0841

我应该使用像

这样的转换器吗?@Convert(converter = OnboardingTaskStatus.class)

在JPA 2.1中使用@Convert正确映射枚举

是否有更好的方法来实现这一点?

您没有显示params.getStatus()是什么,所以很难帮助您。从异常所说的内容来看,它返回的对象不是枚举类型OnboardingTaskStatus

最新更新