2012-06-06 30 views
21

Có thể có một lượt thích trong mệnh đề where trong truy vấn được đặt tên không? Tôi đang cố gắng thực hiện những điều sau đây nhưng tôi đang nhận được ngoại lệTruy vấn được đặt tên giống như trong mệnh đề where

@NamedQuery(name = "Place.getPlaceForCityAndCountryName", 
query = "SELECT p FROM Place p WHERE " + 
     "lower(p.city) like :city and " + 
     "lower(p.countryName) like :countryName"); 

Tôi đã thử thêm% như bạn sẽ làm trong SQL bình thường nhưng nhận được ngoại lệ biên dịch.

Bất kỳ con trỏ nào được đánh giá cao!

Cảm ơn

+1

gì sẽ xảy ra nếu bạn mất thứ hai như ra khỏi thấp function() :) – Davos555

+0

Như @ Davos555 điểm, có dấu ngoặc đơn và dấu trích dẫn: '" thấp hơn (p.countryName) như: countryName ");' –

+0

có cảm ơn - tôi đã sao chép từ một ví dụ phức tạp hơn và không thay đổi chính xác. Tôi sẽ cập nhật câu hỏi ngay bây giờ – RNJ

Trả lời

40

Bạn không thể có% trong NamedQuery, nhưng bạn có thể có nó trong các giá trị mà bạn gán các tham số.

Như trong:

String city = "needle"; 
query.setParamter("city", "%" + city + "%"); 
+0

hoạt động tốt. Cảm ơn esej! – RNJ

+0

đẹp! cảm ơn! : D – Fritz

2

Bạn cũng có thể sử dụng chức năng CONCAT

@NamedQuery(name = "Place.getPlaceForCityAndCountryName", 
    query = "SELECT p FROM Place p WHERE " + 
     "lower(p.city) like CONCAT(:city,'%')"); 
2
@Query("select c from Curso c where c.descripcion like CONCAT(:descripcion,'%')") 

List<Curso> findByDescripcionIgnoreCase(@Param("descripcion") String descripcion); 
+1

Chào mừng bạn đến với Stack Overflow! Mặc dù mã này có thể trả lời câu hỏi, cung cấp ngữ cảnh bổ sung về lý do và/hoặc cách mã này trả lời câu hỏi cải thiện giá trị lâu dài của nó. Các câu trả lời chỉ có mã không được khuyến khích. – Ajean

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