4

假设您在对应于类的表中有以下数据Person,那么安全地搜索空域和字段连接的正确方法是name1什么name2

@Entity
public class Person {
    Long id;
    String name1;
    String name2;
    // Getters and setters omitted for brevity
}
编号 | 名称1 | 名称2   
----------------------
1 | 福 | 空值
2 | 空 | 酒吧
3 | 福 | 酒吧

默认情况下,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
4

1 回答 1

11

一种简单的方法是使用COALESCE在 Querydsl 中具有等效功能的 SQL 函数

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
于 2013-02-20T10:40:33.363 回答