JPA2:不区分大小写,就像在任何地方匹配一样
我一直在JPA 1.0(休眠驱动程序)中使用休眠限制。定义了哪些关键字在任何地方与列匹配,并且不区分大小写。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();
问题:
是否有任何类似于休眠驱动程序的功能?
我是否正确使用了 JPA 2.0 标准?与休眠限制相比,这是一个尴尬且不舒服的解决方案。
或者任何人都可以帮助我如何将我的解决方案更改为不区分大小写,请?
多谢。