làm cách nào tôi có thể đặt tham số Hibernate thành "null"? Ví dụ:Hibernate: Cách đặt giá trị tham số truy vấn NULL bằng HQL?
Query query = getSession().createQuery("from CountryDTO c where c.status = :status and c.type =:type")
.setParameter("status", status, Hibernate.STRING)
.setParameter("type", type, Hibernate.STRING);
Trong trường hợp của tôi, chuỗi trạng thái có thể là rỗng. Tôi đã gỡ lỗi này và ngủ đông sau đó tạo ra một chuỗi SQL/truy vấn như thế này .... status = null
... Tuy nhiên điều này không làm việc trong MYSQL, như câu lệnh SQL đúng phải là "status is null
" (Mysql không hiểu tình trạng = null và đánh giá này là false để không có hồ sơ bao giờ sẽ được trả lại cho các truy vấn, theo các tài liệu mysql tôi đã đọc ...)
Câu hỏi của tôi:
Tại sao doesnt
Hibernate
dịch một chuỗi rỗng một cách chính xác tới "is null" (và đúng hơn là tạo sai "= null")?Cách tốt nhất để viết lại truy vấn này để truy vấn không an toàn là gì? Với nullsafe tôi có nghĩa là trong trường hợp chuỗi "trạng thái" là null hơn nó nên tạo một "là null"?
Cảm ơn bạn rất nhiều! Tim
Đối với những người quan tâm đến giải pháp, tôi nghĩ API tiêu chí là một cách để đi. Nhưng tôi vẫn không thực sự thuyết phục vì nó bloads mã khủng khiếp và sử dụng HQL sẽ sạch hơn nhiều.Có lẽ giải pháp thực sự là triển khai kiểu Hibernate của riêng bạn (tôi đã thực hiện một kiểu cho ENUM nhưng các kiểu tự thực hiện này, ít nhất là các kiểu cơ bản có nhược điểm lớn hơn bulid trong các kiểu ngủ đông trong Truy vấn với HQL (trừ khi bạn cũng mở rộng HQL) parser?) Điều gì làm cho nó trở thành một projekt lớn và đòi hỏi rất nhiều kiến thức Hibernate ... (tiếp theo trong phần 2) – tim
Part2: Có lẽ dễ nhất (mặt khác defenitely NOT a Best Practice) là chỉnh sửa trực tiếp lớp Hibernate String Type Điều này chỉ nên là một dòng xem để kiểm tra các giá trị chuỗi rỗng và hành động tương ứng ... – tim
Chỉ cần chạy vào này quá ... thần của tôi này là braindead –