JPA Expression concatenate more than two columns
You can basically wrap the concat(...)
into each other, or use a method like the following (assuming you want to use the same delimiter string between columns):
private CriteriaBuilder criteriaBuilder = /* ... */
// notice the three dots before "expressions", they are no decoration ;-)
private Expression<String> concat(String delimiter, Expression<String> ... expressions) {
Expression<String> result = null;
for (int i = 0; i < expressions.length; i++) {
final boolean first = i == 0, last = i == (expressions.length - 1);
final Expression<String> expression = expressions[i];
if (first && last) {
result = expression;
} else if (first) {
result = criteriaBuilder.concat(expression, delimiter);
} else {
result = criteriaBuilder.concat(result, expression);
if (!last) {
result = criteriaBuilder.concat(result, delimiter);
}
}
}
return result;
}
Expression<String> userId = root.get(Employee_.userId);
Expression<String> empName = joinDept.get(Employee_.empName);
Expression<String> userName = hist.get(User_.name); // or whatever
Expression<String> stringConcat = concat(" # ", userId, empName, userName);