В настоящее время в процессе создания поиска объектов с использованием CriteriaBuilder, Predicates, JPA 2.0 с EclipseLink в качестве поставщика.Использование Soundex и CriteriaBuilder API от EclipseLink
Мой вызов - это доступ к возможностям soundex и применению его к динамически построенным критериям.
CriteriaBuilder cb = PersistenceUtil.getEntityManager().getCriteriaBuilder();
CriteriaQuery<Registration> q = cb.createQuery(Registration.class);
Root<Registration> dr = q.from(Registration.class);
List<Predicate> predicates = new ArrayList<Predicate>();
... Loop из моих входов в запросе
predicates.add(cb.equal(dr.get(fieldName),fieldValue));
... и, наконец,
q.select(dr).where(predicates.toArray(new Predicate[]{}));
TypedQuery<Registration> query = PersistenceUtil.getEntityManager().createQuery(q).setMaxResults(maxResults);
List<DeathRegistration> results = query.getResultList();
Это, очевидно, прекрасно работает для элементов простых критериев строитель, и я могу используйте «like», «greatThan», сравнение дат и так далее.
Я хочу включить использование выражения, которое использует оператор soundex() EclipseLink. Использование EclipseLink-провайдера открывает мою способность создавать эклипсинг-выражение, но я не могу понять, как применить его к предикату.
ReadAllQuery raq = new ReadAllQuery(Registration.class);
ExpressionBuilder eb = raq.getExpressionBuilder();
org.eclipse.persistence.expressions.Expression fnExp = ExpressionOperator.soundex().expressionFor(eb.get(fieldName));
org.eclipse.persistence.expressions.Expression fnVal = fnExp.equal(fieldValue);
Имея много проблем найти документацию, которая позволила бы мне создать выражение, которое может быть использовано в CriteriaBuilder. Является ли это возможным? Может ли выражение EclipseLink быть преобразовано в параметризованную персистентность? Выражение <>? ... и затем быть установленным как предикат для построенного запроса критериев?