使用 Bean Projection 在 QueryDSL 中自动修剪 [英] Automatic trimming in QueryDSL with Bean Projection

查看:34
本文介绍了使用 Bean Projection 在 QueryDSL 中自动修剪的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有以下 QueryDSL 查询:

List名称 = 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名称 = 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:不支持的表达式修剪(p.lastname)在 com.mysema.query.types.QBean.createBindings(QBean.java:59)在 com.mysema.query.types.QBean.(QBean.java:149)在 com.mysema.query.types.QBean.(QBean.java:138)在 com.mysema.query.types.Projections.bean(Projections.java:51)

有没有办法修剪(所有)字符串结果?

解决方案

在这种情况下,您需要使用显式别名,因为 Querydsl 只接受路径和别名操作作为 QBean 的参数.

List名称 = 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 的子类,来做到这一点.

I have the following QueryDSL query:

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));

What I would like to have is this:

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()));

But when I do that, QueryDSL gives me this error:

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)    

Is there a way to trim (all) string results?

解决方案

You will need to use explicit aliases in this case, because Querydsl accepts only paths and alias-operations as arguments to 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")));

Is there a way to trim (all) string results?

You can create a custom FactoryExpression, e.g. subclass of QBean, to do that.

这篇关于使用 Bean Projection 在 QueryDSL 中自动修剪的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆