Oracle
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Oracle

làm thế nào để sử dụng regexp_like của Oracle trong Hibernate HQL?

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 :)



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Nhận chỉ mục của phần tử trong bộ sưu tập PL / SQL

  2. Điều chỉnh hiệu suất Oracle

  3. Cập nhật các cột có giá trị Null

  4. Oracle RAC và các chuỗi

  5. Có cách nào để đặt bí danh cho truy vấn con trong Oracle 11g SQL không?