当前位置: 首页 > 知识库问答 >
问题:

queryDSL-谓词转换:更改根路径和检查结构

鲁华茂
2023-03-14
  • 实体用户(长Id、字符串用户名、站点站点)
  • 一个DTO用户DTO(长id、字符串用户名、字符串站点名)

转换对象很好,“siteName”自动匹配“site.name”。

因此,我放了一个QueryDSL查询,类似于:userdto.id.gt(20).And(userdto.username.like(“a%”).And(userdto.sitename.like(“%b”));

    null

有什么方法可以做到这一点或达到我的目标吗?

谢谢

共有1个答案

江琦
2023-03-14

通常需要转换表达式。使用自定义的ReplaceVisitor可以覆盖访问(路径expr,@nullable Void context)

执行路径替换的一般方法是使用Map Map定义替换:

if (map.contains(path)) {
    return map.get(path);
} else {
    return super.visit(path, context);
}

您可以这样使用您的访问者:

Expression transformedExpression = expr.accept(visitor, null);
 类似资料:
  • 环境是Java、Spring-boot、Hibernat、QueryDSL、MySQL。 我有表结构 艾碧索 更新 为了澄清起见,支持UI视图的DTO包含“casename”属性。它是在将域对象转换为DTO时在服务层创建的:

  • 我在应用程序中使用Querydsl来大大改进查询数据库的代码。但是,我有一个来自外部服务的JPA谓词(javax.persistence.criteria.Predicate)。我想混合使用Querydsl和外部谓词创建的查询。例如: 另一个解决方案是将Querydsl谓词转换为JPA谓词: 有可能吗?如果是,我如何做到这一点?如果没有,是否有其他混合谓词的解决方案(比如将两者转换为SQL字符串并

  • 我需要@query的原因是应用基于身份验证主体的安全性。 存储库的完整代码:

  • 我想根据ModelB中的用户从modelA中获取数据。但这并不是强制要求我在ModelB中为每一个记录都有记录。所以当我使用下面的代码来获取数据时,它返回0条记录。 当我调试时,我发现QueryDsl将交叉联接。有人能告诉我如何修复这个问题吗?querydsl有没有办法添加左联接而不是交叉联接?下面是我的两个模型。

  • 我使用Spring数据、QueryDSL和MySQL。 我想在queryDSL方法中这样查询。一个具体的例子只是一个简单的例子来给出一个想法。 例如,有两个表Employee和Certificate。两个之间的关系是一个(员工)对多个(证书) 以下是表 以下是这些实体, 谢谢你

  • 我正在使用spring-data、QueryDSL和MySQL。 返回所有包含姓名的员工(在first_name和last_name中),并从该结果中获得的证书在2014年12月22日至2015年12月22日之间 我尝试了它,但无法获得如何以QueryDSL方式迭代每个员工的每个证书并返回员工列表。 您的回应将非常感谢!!