Querydsl 空安全连接
Posted
技术标签:
【中文标题】Querydsl 空安全连接【英文标题】:Querydsl null-safe concatenation 【发布时间】:2013-02-05 08:00:49 【问题描述】:假设您在表中有以下数据对应于类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
【问题讨论】:
【参考方案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
【讨论】:
以上是关于Querydsl 空安全连接的主要内容,如果未能解决你的问题,请参考以下文章
Oracle表与表之间的连接方式(内连接:inner join 外连接 全连接: full outer join左连接:left outer join 右连接:right outer join(代码