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 テーブルが使用されているかを判断する必要があります。