Я использовал ограничения гибернации в JPA 1. 0 (драйвер гибернации). Определен Restrictions.ilike ("столбец", "ключевое слово", MatchMode.ANYWHERE)
, который проверяет, соответствует ли ключевое слово в любом месте столбцу и не учитывает регистр.
Теперь я использую JPA 2.0 с EclipseLink в качестве драйвера, поэтому мне приходится использовать встроенный JPA 2.0 «Ограничения». Я нашел CriteriaBuilder
и метод , например
, я также узнал, как сделать так, чтобы он соответствовал где угодно (хотя это ужасно и вручную), но все же я не понял, как это сделать он нечувствителен к регистру.
Вот мое текущее ужасное решение:
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? Это неудобное и неудобное решение по сравнению с ограничениями гибернации.
Или кто-нибудь может мне помочь, как изменить решение, чтобы оно не учитывало регистр, пожалуйста?
Большое спасибо.