現在、EclipseLink をプロバイダーとして CriteriaBuilder、Predicates、JPA 2.0 を使用してオブジェクト検索を作成中です。
私の課題は、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()演算子を使用する式を使用できるようにしたいと考えています。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 で使用できる Expression を作成するためのドキュメントを見つけるのに苦労しました。出来ますか?EclipseLink 式をパラメータ化された永続性 Expression<> に変換できますか? ...そして、構築された基準クエリの述語として設定されますか?