この質問をして、MySQL と Hibernate が正規表現でどのように連携するかを示します。
問題:
SELECT * FROM table WHERE regexp column '\d'
解決:
私の答えに行きます。
お役に立てれば。
基本的に、Hibernate で MySQL 正規表現関数を使用するには、"SQLFunctionTemplate" を作成する必要があります。
さて、それを行う方法:
最初に: 「AppMySQLDialect」というクラスを作成し、MySQLDialect から拡張してから、空のコンストラクターをオーバーライドし、最後に正規表現関数を登録します。
public class AppMySQLDialect extends MySQLDialect {
public AppMySQLDialect() {
super();
/**
* Function to evaluate regexp in MySQL
*/
registerFunction("regexp", new SQLFunctionTemplate(Hibernate.INTEGER, "?1 REGEXP ?2"));
}
}
さて、次のように使用しましょう。
FROM Entity E WHERE regexp(E.string2evaluate, '\d') = 1
HibernateQuery を作成して実行します。
String range = "ABCD";
List<HRTrainee> hrTrainees =
(List<HRTrainee>)sessionFactory.getCurrentSession().createCriteria(HRTrainee.class)
.add(Restrictions.sqlRestriction("name REGEXP '^["+range+"]'")).list();
return hrTrainees;