如果我构造一个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 谓词相对应的约束。执行搜索的应用程序部分必须查看谓词等,以确定哪些 DB 表用于形成 JOIN 等。