Không có ilike
chức năng tương đương trong HQL. Như Konstantin đã chỉ ra trong số suggestion của mình, lựa chọn tốt nhất của bạn là tune the database connection và đặt collation thành TERRITORY_BASED:SECONDARY
, như được giải thích trong JIRA này: DERBY-1748: Global case insensitive setting.
Cân nhắc rằng tất cả các điểm cân bằng (=
) và like
sẽ không phân biệt chữ hoa chữ thường. Điều này có thể đi quá xa và không phù hợp với tình huống cụ thể của bạn.
Một cách khác để giải quyết vấn đề này là tạo chỉ mục dựa trên chức năng (nếu Derby hỗ trợ chúng) và điều chỉnh HQL của bạn để kết hợp like
và lower
như thế này.
Query q = session.createQuery("... WHERE lower(entity.field) like ?)");
q.setString(0, '%' + variable.toLowerCase() + '%');
Nếu Derby không hỗ trợ FBI (tôi nghĩ là không), bạn cũng có thể tạo cột được kích hoạt có giá trị thấp hơn và lập chỉ mục chúng.
CẬP NHẬT Có vẻ như có thể xác định các cột có nguồn gốc/được tạo tự động, như được giải thích trong JIRA khác: JIRA-481: implement SQL generated columns.
Nguồn
2011-11-02 09:41:29
Bạn đang nói ** như ** sẽ không hoạt động HQL trong cơ sở dữ liệu Derby? – ManuPK
như * sẽ * hoạt động, nhưng trường hợp nhạy cảm – gotch4