Amigo, acredito que não seja possível fazer isso com o hibernate… posso estar enganado. Mas o hibernate foi feito para abstrair os BDs, e vc está tentando usar uma funcionalidade específica de um BD… não existe REGEX no sql “de verdade”, portanto acredito que oq vc deseja realmente não será possível com o hibernate.
Eu proponho 2 soluções pra vc:
1 - Não use hibernate, se conecte direto com o seu banco.
2 - Continue usando o hibernate e crie seus prórios métodos de REGEX. (Por exemplo, no exemplo q vc deu com o Sou[sz]a, faça uma query para o Sousa e outra para o Souza.)
_
_fs
Você vai ter que criar seu próprio Criterion.
Algo como:
publicclassRegExpExpressionimplementsCriterion{privateStringproperty,regexp;publicRegExpExpression(Stringproperty,Stringregexp){this.property=property;this.regexp=regexp;}publicTypedValue[]getTypedValues(Criteriacriteria,CriteriaQuerycriteriaQuery)throwsHibernateException{returnnewTypedValue[]{newTypedValue(Hibernate.STRING,regexp,EntityMode.POJO)};}publicStringtoSqlString(Criteriacriteria,CriteriaQuerycriteriaQuery)throwsHibernateException{Stringcolumn=criteriaQuery.getColumnsUsingProjection(criteria,property)[0];returncolumn+" REGEXP ?";}}// para usarsession.createCriteria(Person.class).add(newRegExpExpression("name","F[ie]lipe")).list();