Được rồi, sau rất nhiều thử nghiệm với các chiến lược khác nhau, đây là những gì tôi đã làm cuối cùng đã thành công.
Tôi thấy bài đăng này tại đây
và chợt nhớ đến JPA Tuple
Giao diện là một Đối tượng có thể trả về nhiều Loại kết quả. Vì vậy, để thực hiện like
của tôi so sánh, và vì Ngày không thể được truyền đơn giản thành Chuỗi nên đây là các bước;
- Tôi nhận được cột dưới dạng
Tuple
- kiểm tra Đối tượng Tuple để xem liệu nó có thể chuyển nhượng được từ Ngày không
- nếu đúng như vậy, hãy lấy biểu thức Định dạng Ngày tháng và chuyển nó vào
like
biểu hiện.
Vì vậy, về cơ bản, đây là những gì tôi có ban đầu dường như đã thất bại;
predicates.add(cb.like(cb.lower(entity.get("dateJoined").as(String.class)), "%"+search.toLowerCase()+"%"));
Bây giờ, đây là những gì tôi có và hoạt động tuyệt vời;
Path<Tuple> tuple = entity.<Tuple>get("dateJoined");
if(tuple.getJavaType().isAssignableFrom(Date.class)){
Expression<String> dateStringExpr = cb.function("DATE_FORMAT", String.class, entity.get("dateJoined"), cb.literal("'%d/%m/%Y %r'"));
predicates.add(cb.like(cb.lower(dateStringExpr), "%"+search.toLowerCase()+"%"));
}
LƯU Ý-NHỮNG CÂU XÉT XÁC NHẬN THẬT SỰ -
- Tôi biết rằng từ bất cứ nơi nào bắt đầu tìm kiếm, tất cả Ngày của tôi đều được trình bày trong biểu mẫu này
07/10/2015 10:25:09 PM
do đó tôi có khả năng biết cách định dạng Ngày để so sánh tronglike
của tôi biểu thức dưới dạng"'%d/%m/%Y %r'"
. - Đây chỉ là một bước hoạt động cho Ngày. Hầu hết các Loại khác, ví dụ int, long, char ... vv ... đều có thể được Truyền trực tiếp sang Chuỗi và khi tôi khám phá thêm Các loại dữ liệu, tôi chắc chắn sẽ làm như vậy đối với bất kỳ Loại nào khác không thể Truyền trực tiếp sang Chuỗi .
Mặc dù điều này hoàn toàn phù hợp với tôi, nhưng trước khi đánh dấu đây là câu trả lời đúng, tôi sẽ phải tuân theo một số bài kiểm tra mở rộng hơn và trong quá trình này, hãy giữ nó mở để nhận xét bởi bất kỳ ai có bất kỳ sự dè dặt nào về chiến lược của tôi.
Và cuối cùng, với một người rằng điều này đã giúp ích theo bất kỳ cách nào ... Chúc mừng!