RJo*_*RJo 4 java database null data-access-layer querydsl
假设你有相应的类在表中的以下数据Person,什么是搜索空安全地场的串联的正确方法name1和name2?
@Entity
public class Person {
Long id;
String name1;
String name2;
// Getters and setters omitted for brevity
}
Run Code Online (Sandbox Code Playgroud)
id | name1 | name2 ------------------------ 1 | Foo | null 2 | null | Bar 3 | Foo | Bar
默认情况下,两列的连接将导致nullif为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)
}
Run Code Online (Sandbox Code Playgroud)
以上代码导致以下列表:
null
null
FooBar
Run Code Online (Sandbox Code Playgroud)
RJo*_*RJo 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();
}
Run Code Online (Sandbox Code Playgroud)
将产生以下列表:
Foo
Bar
FooBar
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5473 次 |
| 最近记录: |