假设您在表Person
对应的表中有以下数据,对于字段name1
和name2
的串联搜索是否正确无误地搜索?
@Entity
public class Person {
Long id;
String name1;
String name2;
// Getters and setters omitted for brevity
}
id | name1 | name2 ------------------------ 1 | Foo | null 2 | null | Bar 3 | Foo | Bar
默认情况下,如果两个列为空,则两列的连接将生成null
。
public List<String> nameConcatenations() {
JPAQuery q = new JPAQuery(entityManager);
QPerson person = QPerson.person;
StringExpression nameConcatenation = person.name1.concat(person.name2);
return q.from(person).list(nameConcatenation)
}
以上代码产生以下列表:
null
null
FooBar
答案 0 :(得分:10)
一种简单的方法是使用SQL的COALESCE
函数,该函数在Querydsl中具有等价的
public List<String> nameConcatenations() {
JPAQuery q = new JPAQuery(entityManager);
QPerson person = QPerson.person;
StringExpression nameConcatenation = emptyIfNull(person.name1)
.concat(emptyIfNull(person.name2));
return q.from(person).list(nameConcatenation)
}
private static StringExpression emptyIfNull(StringExpression expression) {
return expression.coalesce("").asString();
}
将产生以下列表:
Foo
Bar
FooBar