regexp_like為oracle10過後出來的一個新函數,是為瞭做正則表達式的匹配,但是hsql確不支持該sql,後來查瞭一下大概原因,是方言中間沒有將該函數註冊進去,所以不能對應的將hsql轉換為sql,解決辦法:
[java]
public class TestOracle10gDialect extends Oracle10gDialect {
public TestOracle10gDialect() {
super();
/**
* 對於regexp_like,並不知道其是什麼類型,應該為boolean類型,但是oracle對外提供的類型並沒有boolean類型,
* 所以為瞭使其能夠正常運作,將結果用1(true)、0(false)來表示
*/
registerFunction("regexp_like", new SQLFunctionTemplate(
Hibernate.BOOLEAN,
"(case when (regexp_like(?1, ?2)) then 1 else 0 end)"));
}
}
其實很多人都遇到過類似的問題,而答案都是改用like,其實like雖然好用,但是其查找功能肯定比不上regexp_like靈活。