Если я создам такой предикат 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
}
}
Обновление, зачем мне это нужно: Наше веб-приложение позволяет пользователям создавать собственные поисковые запросы к БД, их можно сохранять/загружать в/из базы данных (используя JAXB). Каждый запрос состоит из одного или нескольких ограничений, соответствующих предикатам QueryDSL. Часть приложения, которая сама выполняет поиск, должна среди прочего изучать предикаты, чтобы определить, какие таблицы БД используются для формирования соединений JOIN и т. д.