Trên thực tế, bạn không thể so sánh kết quả của REGEXP_LIKE với bất kỳ thứ gì ngoại trừ trong các câu lệnh có điều kiện trong PL / SQL.
Hibernate dường như không chấp nhận một hàm tùy chỉnh mà không có returnType, vì bạn luôn cần so sánh đầu ra với một thứ gì đó, tức là:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Vì Oracle không cho phép bạn so sánh kết quả của hàm này với không, nên tôi đã đưa ra một giải pháp bằng cách sử dụng điều kiện trường hợp:
public class Oracle10gExtendedDialect extends Oracle10gDialect {
public Oracle10gExtendedDialect() {
super();
registerFunction(
"regexp_like", new SQLFunctionTemplate(StandardBasicTypes.BOOLEAN,
"(case when (regexp_like(?1, ?2, ?3)) then 1 else 0 end)")
);
}
}
Và HQL của bạn sẽ trông như thế này:
REGEXP_LIKE('bananas', 'a', 'i') = 1
Nó sẽ hoạt động :)