我有以下QueryDSL查询:
List<DTOPerson> names = query.from(p)
.where(p.lastname.like("%smith%"))
.orderBy(p.lastname.asc(), p.firstname.asc())
.list(Projections.bean(DTOPerson.class, p.lastname, p.firstname));
我想要的是:
List<DTOPerson> names = query.from(p)
.where(p.lastname.like("%smith%"))
.orderBy(p.lastname.asc(), p.firstname.asc())
.list(Projections.bean(DTOPerson.class, p.lastname.trim(), p.firstname.trim()));
但是当我这样做时,QueryDSL给了我这个错误:
java.lang.IllegalArgumentException: Unsupported expression trim(p.lastname)
at com.mysema.query.types.QBean.createBindings(QBean.java:59)
at com.mysema.query.types.QBean.<init>(QBean.java:149)
at com.mysema.query.types.QBean.<init>(QBean.java:138)
at com.mysema.query.types.Projections.bean(Projections.java:51)
有没有办法修剪(全部)字符串结果?
答案 0 :(得分:3)
在这种情况下,您需要使用显式别名,因为Querydsl只接受路径和别名操作作为QBean的参数。
List<DTOPerson> names = query.from(p)
.where(p.lastname.like("%smith%"))
.orderBy(p.lastname.asc(), p.firstname.asc())
.list(Projections.bean(DTOPerson.class,
p.lastname.trim().as("lastname"),
p.firstname.trim().as("firstname")));
有没有办法修剪(全部)字符串结果?
您可以创建自定义FactoryExpression,例如QBean的子类,要做到这一点。