JPA 1.0(Hibernateドライバー)でHibernateの制限を使用しています。キーワードがどこかの列に一致するかどうかをテストするものが定義されRestrictions.ilike("column","keyword", MatchMode.ANYWHERE)
ており、大文字と小文字は区別されません。
現在、EclipseLinkをドライバーとして使用してJPA 2.0を使用しているため、「制限」組み込みのJPA2.0を使用する必要があります。私は見つけCriteriaBuilder
て方法like
を見つけました。どこでも一致させる方法も見つけましたが(それは素晴らしく手動ですが)、それでも大文字と小文字を区別しない方法を理解していません。
私の現在の素晴らしい解決策があります:
CriteriaBuilder builder = em.getCriteriaBuilder();
CriteriaQuery<User> query = builder.createQuery(User.class);
EntityType<User> type = em.getMetamodel().entity(User.class);
Root<User> root = query.from(User.class);
// Where
// important passage of code for question
query.where(builder.or(builder.like(root.get(type.getDeclaredSingularAttribute("username", String.class)), "%" + keyword + "%"),
builder.like(root.get(type.getDeclaredSingularAttribute("firstname", String.class)), "%" + keyword + "%"),
builder.like(root.get(type.getDeclaredSingularAttribute("lastname", String.class)), "%" + keyword + "%")
));
// Order By
query.orderBy(builder.asc(root.get("lastname")),
builder.asc(root.get("firstname")));
// Execute
return em.createQuery(query).
setMaxResults(PAGE_SIZE + 1).
setFirstResult((page - 1) * PAGE_SIZE).
getResultList();
質問:
Hibernateドライバーのような機能はありますか?
JPA 2.0基準を正しく使用していますか?これは、Hibernateの制限と比較して厄介で不快な解決策です。
または、大文字と小文字を区別しないようにソリューションを変更する方法を教えてもらえますか?
どうもありがとう。