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