我正在尝试按子实体的字段("Act"实体中"自然"实体中的"文本"字段)进行排序。"自然"实体是 actRoot 的一个字段。
这是我的代码:
@Override
public Order apply(Root<Act> actRoot, CriteriaBuilder builder) {
Expression<?> nature = builder.selectCase()
.when(builder.isNull(actRoot.get("nature")), "")
.otherwise(actRoot.get("nature").get("text"))
.as(String.class);
return builder.asc(nature);
}
所以我创建了一个字符串类型的临时表,默认为空值的 Acts,具有空"性质"。问题是休眠不会返回"自然"为空的行为。完全没有错误。我需要一个结果,首先是按"文本"字段排序的非空"自然"行为,然后是所有具有空"性质"
的行为有什么建议吗?谢谢
好的
,我找到了解决方案:我需要一个联接。
@Override
public Order apply(Root<Act> actRoot, CriteriaBuilder builder) {
Join join = actRoot.join("nature", LEFT);
return builder.asc(join.get("text"));
}