2008-11-17 20 views
5

Tôi có một truy vấn SQL SELECT trong đó có một điều khoản NHƯ chứa một dấu gạch dưới, mà cụ thể là nên tìm kiếm một dấu gạch dưới, không đối xử với nó như là một ký tự đại diện:Cấu hình Hibernate để thoát khỏi dấu gạch tại khoản NHƯ sử dụng SQL Server phương ngữ

SELECT * FROM my_table WHERE name LIKE '_H9%'; 

Tôi hiểu rằng tôi có thể thay đổi mệnh đề thực tế thành '[_] H9%' để điều này hoạt động như tôi mong đợi, nhưng vấn đề là mệnh đề này đang được tạo bởi Hibernate.

Có cách nào để định cấu hình Hibernate để thoát khỏi tất cả dấu gạch dưới trong tất cả các truy vấn theo cách này không? Nếu không, có cách nào để cấu hình SQL Server (2008 trong trường hợp của tôi) để không coi dấu gạch dưới là ký tự đại diện không?

+0

API nào bạn đang sử dụng với Hibernate (nghĩa là Truy vấn tiêu chí, HQL, v.v ...)? Nó sẽ hữu ích, nếu bạn cung cấp một phần của cấu hình mã/hibernate. – FoxyBOA

Trả lời

5

Nếu bạn đang sử dụng tiêu chí để tạo truy vấn, bạn có thể tạo biểu thức của riêng bạn mà lớp con org.hibernate.criterion.LikeExpression, sử dụng một trong các hàm tạo được bảo vệ có trong 'Character escapeChar' và thay thế trong giá trị cho bạn. Giả sử răng '!' là một giá trị đã biết rằng sẽ không thể ở bất kỳ chuỗi tìm kiếm (bạn có thể chọn bất kỳ mà bạn thích, tôi đoán), bạn chỉ có thể làm:

public class EscapingLikeExpression extends LikeExpression { 
    public EscapingLikeExpression(String propertyName, String value) { 
     super(propertyName, escapeString(value), '!', false); 
    } 

    static String escapeString(String inputString) { 
    inputString = inputString.replace("_", "!_"); 
    return inputString; 
    } 

} 

nếu không có ký tự như vậy (mà sẽ không xuất hiện trong giá trị tìm kiếm của bạn dưới dạng chữ) sau đó thêm dòng sau đây làm dòng đầu tiên của escapeString() để thoát khỏi các giá trị đó:

inputString = inputString.replace("!", "!!"); 
0

Tại sao bạn không thể thực hiện thay thế chuỗi trên giá trị? Làm thế nào là điều này được sử dụng để đây là một giải pháp không khả thi?

Các vấn đề liên quan