You can do pretty powerful queries and fuzzy logic using the Criteria API and using the 'like' abilities for matching at the beginning, end, or anywhere in a given word or field.
Here's a nice little tutorial on using the Hibernate Criteria API:
http://www.hiberbook.com/HiberBookWeb/learn.jsp?tutorial=09howtousethecriteriaapiIt's not plain english, but this query below using the criteria API to find a User match that has an id greater than (gt) 2, less than (ld) 8, has a notNull email address, and a String match at the end of a field on '.com' It's all highly readable by a Java professional, and can allow you or the end user to really control the types of matches you get.
Code:
Session session = HibernateUtil.beginTransaction();
Criterion c1 = Restrictions.gt("id", (long)2);
Criterion c2 = Restrictions.lt("id", (long)8);
Criterion c3 = Restrictions.isNotNull("emailAddress");
User user = new User();
user.setEmailAddress(".com");
Example c4 = Example.create(user);
c4.enableLike(MatchMode.END);
c4.ignoreCase();
Criteria criteria = session.createCriteria(User.class);
criteria.add(c1);
criteria.add(c2);
criteria.add(c3);
criteria.add(c4);
List results = criteria.list();
HibernateUtil.commitTransaction();
for (int i = 0; i<results.size(); i++) {
System.out.println(results.get(i).toString());
}