[英]QueryDSL: how to get an argument from a PathMetadata object
如果我像這樣構造謂詞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等。
foo.bar=1234
是一個操作, foo
和foo.bar
是Path實例,而1234是一個常量。
您可以通過將謂詞強制轉換為Operation來提取1234的常量
Constant constant = (Constant)((Operation)predicate).getArg(1);
您的用例是什么?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.