4

クラスに対応する次のデータがテーブルにあると仮定します。Personフィールドの連結をnull-safeで検索する正しい方法は何name1ですかname2

@Entity
public class Person {
    Long id;
    String name1;
    String name2;
    // Getters and setters omitted for brevity
}
id | name1 | name2   
------------------------
1 | フー| ヌル
2 | null | バー
3 | フー| バー

デフォルトでは、2つの列を連結するとnull、どちらかが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簡単な方法の1つは、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 に答える