我一直在JPA 1.0(Hibernate驱动程序)中使用Hibernate Restrictions.定义了Restrictions.ilike("column","keyword", MatchMode.ANYWHERE)哪些测试关键字是否匹配列的任何位置,并且它不区分大小写.
现在,我使用JPA 2.0和EclipseLink作为驱动程序,因此我必须使用"Restrictions"内置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();
Run Code Online (Sandbox Code Playgroud)
问题: …
如何在Rails中修改搜索查询的where/like条件:
find(:all, :conditions => ["lower(name) LIKE ?", "%#{search.downcase}%"])
无论重音如何,结果都是匹配的?(例如métro= metro).因为我使用的是utf8,所以我不能使用"to_ascii".生产正在Heroku上运行.
在使用JPA的J2EE项目中,如何强制类似查询不区分大小写并且不区分重音?
我知道更改会话变量NLS_COMP和NLS_SORT,但我想知道在查询本身是否还有另一个技巧可以做到这一点,而不更改会话变量
SELECT COUNT(*), name, number
FROM tbl
GROUP BY name, number
HAVING COUNT(*) > 1
Run Code Online (Sandbox Code Playgroud)
它有时无法在小写和大写之间找到重复.
例如:sunny并且Sunny不会显示为重复项.
那么如何在PostgreSQL中为两列找到所有可能的重复项.
java ×2
postgresql ×2
criteria ×1
duplicates ×1
eclipselink ×1
jpa ×1
jpa-2.0 ×1
oracle ×1
sql ×1
unaccent ×1