0
同様の方法でジョイントでジョインを使用できるようにするには、回避策が必要です。 criteriaBuilderはequalメソッドとの結合をサポートしますが、likeメソッドとの結合はサポートしません。これらの場合、回避策はありますか?likeを使用してcriteriaBuilderに参加できません。等しいだけで動作します
public Predicate toPredicate(Root<T> root, CriteriaQuery<?> criteriaQuery, CriteriaBuilder criteriaBuilder) {
switch (criteria.getOperation()) {
case ":":
String[] s = criteria.getKey().split("\\.");
if (s.length == 1) {
if (root.get(criteria.getKey()).getJavaType() == String.class) {
return criteriaBuilder.like(criteriaBuilder.upper(
root.<String>get(criteria.getKey())), "%" + criteria.getValue().toString().toUpperCase() + "%");
} else if (root.get(criteria.getKey()).getJavaType() == Date.class) {
try {
DateFormat formatter = new SimpleDateFormat("dd/MM/yyyy");
return criteriaBuilder.greaterThanOrEqualTo(root.<java.util.Date>get(criteria.getKey()), formatter.parse(criteria.getValue().toString()));
} catch (ParseException e) {
}
} else {
return criteriaBuilder.equal(root.get(criteria.getKey()), criteria.getValue());
}
} else {
//I need a "like" here
return criteriaBuilder.equal(root.join(s[0]).get(s[1]), criteria.getValue());
}
default:
return null;
}
}
です。
なぜ「like」が機能しないと思いますか? – ujulu
@ujulu "like"は(引数の点で)joinをサポートしていません。 –