【问题标题】:Querydsl null-safe concatenationQuerydsl 空安全连接
【发布时间】:2013-02-05 08:00:49
【问题描述】:

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

@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

【问题讨论】:

    标签: java database null data-access-layer querydsl


    【解决方案1】:

    一种简单的方法是使用 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
    

    【讨论】:

      猜你喜欢
      • 2019-01-30
      • 2018-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-10
      • 1970-01-01
      • 2016-08-27
      相关资源
      最近更新 更多