我有一个DetachedCriteria
我用来根据名称字段搜索表格。我想让搜索不区分大小写,并且想知道是否有办法在不使用HQL的情况下执行此操作。类似的东西:
private void searchByFullName(DetachedCriteria criteria, String searchCriteria) {
criteria.add(Restrictions.like("fullName", "%" + searchCriteria.toLowerCase() + "%"));
criteria.addOrder(Order.asc("fullName"));
}
但是我想确保它在搜索时会忽略这种情况(它必须同时搜索大写和小写),所以它生成的SQL应该类似于:
SELECT * FROM Student WHERE ? LIKE toLower(FULL_NAME);
答案 0 :(得分:0)
您使用的数据库是什么? MySQL LIKE对CHAR,VARCHAR和TEXT列不区分大小写(我相信SQL Server也是如此)。
http://dev.mysql.com/doc/refman/5.5/en/case-sensitivity.html
如果您正在使用PostgreSQL,则需要使用ILIKE运算符,因此您需要使用Restrictions.ilike(“fullName”,name)。
答案 1 :(得分:0)
我看到两个选项,
选项1:
private void searchByFullName(DetachedCriteria criteria, String searchCriteria) {
criteria.add(Restrictions.like("toLower(fullName)", "%" + searchCriteria.toLowerCase() + "%"));
criteria.addOrder(Order.asc("fullName"));
}
选项2:
private void searchByFullName(DetachedCriteria criteria, String searchCriteria) {
criteria.add(Restrictions.sqlRestriction("toLower({alias}.fullName) LIKE '%" + searchCriteria.toLowerCase() + "%'"));
criteria.addOrder(Order.asc("fullName"));
}
我对选项1不太乐观。选项2应该可以肯定。 {alias}
是占位符,让Hibernate知道在创建SQL时需要为表添加适当的别名。更多信息http://docs.jboss.org/hibernate/core/3.5/api/org/hibernate/criterion/Restrictions.html#sqlRestriction%28java.lang.String%29