현재 CriteriaBuilder, Predicates, 공급자로 EclipseLink를 사용하여 JPA 2.0을 사용하여 객체 검색을 만드는 과정입니다.EclipseLink에서 Soundex 및 CriteriaBuilder API 사용
나의 도전은 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>();
... 쿼리
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', 'greaterThan', 날짜 비교 등을 사용하십시오.
EclipseLink soundex() 연산자를 사용하는 Expression을 사용할 수있게하려고합니다. EclipseLink 프로 바이더를 사용하면 eclipselink Expression을 생성 할 수있는 능력이 생기지 만,이를 프리디 케이트에 적용하는 방법을 찾아 낼 수는 없습니다.
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 Expression을 매개 변수화 된 지속성으로 변환 할 수 있습니까? Expression <>? ... 그리고 나서 만들어진 criteria 질의를위한 술어로 설정 될 것인가?