1

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 アプリケーションでは、ユーザーがカスタム DB 検索クエリを作成できます。これらはデータベースに保存/データベースから (JAXB を使用して) ロードできます。各クエリは、QueryDSL Predicate に対応する 1 つ以上の制約で構成されます。検索自体を行うアプリケーションの部分は、特に述語を調べて、JOIN などを形成するためにどの DB テーブルが使用されているかを判断する必要があります。

4

1 に答える 1

3

foo.bar=1234はオペレーションでfooありfoo.bar、パス インスタンスであり、1234 は定数です。

述語を Operation にキャストすることで、1234 の定数を抽出できます。

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

これのユースケースは何ですか?

于 2013-09-10T17:49:08.400 に答える