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

时间:2013-09-10 17:34:25

标签: 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 Predicates对应的约束组成。执行搜索的应用程序本身必须查看谓词以确定哪些DB表用于构成JOIN等。

1 个答案:

答案 0 :(得分:2)

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

您可以通过将谓词转换为Operation

来提取1234的常量
Constant constant = (Constant)((Operation)predicate).getArg(1);

你的用例是什么?