使用Hibernate进行不区分大小写的搜索

Yuv*_*val 49 sql select hibernate case-sensitive

我正在将Hibernate用于我的Java应用程序的ORM到Oracle数据库(不是数据库供应商很重要,我们可能有一天会切换到另一个数据库),我想根据用户提供的字符串从数据库中检索对象.例如,在搜索人员时,如果用户正在寻找居住在'fran'的人,我希望能够在旧金山为她的员工提供服务.

SQL不是我的强项,我更喜欢Hibernate的Criteria构建代码到硬编码字符串.任何人都可以指出我在正确的方向上如何在代码中执行此操作,如果不可能,硬编码的SQL应该如何?

谢谢,

Yuval = 8-)

Cow*_*wan 72

对于您描述的简单情况,请查看Restrictions.ilike(),它执行不区分大小写的搜索.

Criteria crit = session.createCriteria(Person.class);
crit.add(Restrictions.ilike('town', '%fran%');
List results = crit.list();
Run Code Online (Sandbox Code Playgroud)

  • 嗯...首选MatchMode.ANYWHERE超过'%' (20认同)
  • 对于任何寻找NHibernate等效的人来说,试试'InsensitiveLike()' (9认同)
  • 我刚试了这个.并且它不会表现不区分大小写 (6认同)
  • 请注意,如果你从Eq切换到Like,你也会启用通配符,所以像oracle中的下划线匹配任何字符. (2认同)

小智 37

Criteria crit = session.createCriteria(Person.class);
crit.add(Restrictions.ilike('town', 'fran', MatchMode.ANYWHERE);
List results = crit.list();
Run Code Online (Sandbox Code Playgroud)


Sam*_*amS 9

如果你使用Spring的HibernateTemplate与Hibernate进行交互,那么你可以在这里对用户的电子邮件地址进行不区分大小写的搜索:

getHibernateTemplate().find("from User where upper(email)=?", emailAddr.toUpperCase());
Run Code Online (Sandbox Code Playgroud)