簡體   English   中英

QueryDSL:如何從PathMetadata對象獲取參數

[英]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是一個操作, foofoo.bar是Path實例,而1234是一個常量。

您可以通過將謂詞強制轉換為Operation來提取1234的常量

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

您的用例是什么?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM