java - QueryDSL:如何从 PathMetadata 对象获取参数

标签 java querydsl

如果我构造一个像这样的谓词foo.bar=1234

PathBuilder<?> entityPath = new PathBuilder("foo");
NumberPath<BigDecimal> path = entityPath.getNumber("bar", BigDecimal.class);
Predicate predicate = path.eq(BigDecimal.valueOf(1234));

稍后如何找到参数值 (1234)?

到目前为止我的尝试:

Path<?> path = (Path<?>) predicate.accept(PathExtractor.DEFAULT, null);
PathMetadata<?> md = path.getMetadata();

if(md.getExpression().toString().equals("bar")) {
   Object val = md.getPathType().VARIABLE;    // probably already a wrong approach...
   if(val instanceof BigDecimal) {
   // doesn't work
   }
}

更新,为什么我需要这个:我们的 Web 应用程序允许用户创建自定义数据库搜索查询,这些查询可以保存到数据库或从数据库加载(使用 JAXB)。每个查询由一个或多个与 QueryDSL 谓词相对应的约束组成。应用程序本身执行搜索的部分必须查看谓词等,以确定使用哪些数据库表来形成 JOIN 等。

最佳答案

foo.bar=1234 是一个操作,foofoo.bar 是 Path 实例,1234 是一个常量。

您可以通过将谓词转换为操作来提取 1234 的常量

Constant constant = (Constant)((Operation)predicate).getArg(1);

您的用例是什么?

关于java - QueryDSL:如何从 PathMetadata 对象获取参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18725405/

相关文章:

java - java中的 "main"可以返回一个String吗?

Java:通过接口(interface)实现参数化的类类型

java - Spring Data REST、QueryDSL 和 HashMaps - 引用 HashMap 属性时来自 URL 的 Null 谓词

java - QueryDSL JPA- 与 group by 无关的自连接

java - 如何让我的 fxml 和 java 类协同工作?

java - 重启elasticsearch节点

java - Spring Security OAuth 2 资源服务器 : converting jwks for jwt verification not supporting use==enc

java - 使用 Java 更新 elasticsearch 中的多个文档。我正在使用 Elasticsearch 2.3.2

java - Querydsl native jpa查询返回实体而不是对象数组

java - 如何使用 Spring 通过多个可选条件和 OneToMany 关系进行查找