2016-01-30 40 views
7

tôi cố gắng cổng một ứng dụng web Java để mới Java 8 ngày & Time API (sử dụng 'LOCALDATE' và các loại 'LocalDateTime' số những người khác)Tiêu chuẩn JPA2 và Java 8 Date & Time API

Trong Java 7, java. util.Date có thể được sử dụng trong API tiêu chuẩn JPA2 để lọc các tập hợp kết quả vào các ngày tháng. Thông thường, người ta sẽ làm điều này bằng cách thêm một vị từ, ví dụ:

.. 
predicatesList.add(builder.between(from.get(AccountLog_.valueDate), fromDate, toDate)); 
.. 

Bây giờ JPA2 không hỗ trợ mới Java 8 ngày & Time API (LOCALDATE và LocalDateTime) được nêu ra. Với riêng "Thuộc tính chuyển đổi", làm việc với các đơn vị đã có thể đạt được như mô tả trong blog http://www.thoughts-on-java.org/persist-localdate-localdatetime-jpa/

Bây giờ câu hỏi của tôi: làm thế nào tôi có thể sử dụng LOCALDATE và LocalDateTime trong tiêu chí JPA2 API để lọc các bộ kết quả trên LOCALDATE thay vì Ngày? 'between' như được sử dụng trước đây không hoạt động đối với các phiên bản LocalDate.

+1

JPA2.2 có khắc phục được điều này hay không? – Krismorte

+0

@Krismorte theo [https://www.thoughts-on-java.org/whats-new-in-jpa-2-2/](https://www.thoughts-on-java.org/whats- new-in-jpa-2-2 /) bạn có vẻ đúng. Mặc dù đã không thử nó ra –

+0

Tôi phải đối mặt với vấn đề này quá đây là câu hỏi của tôi https://stackoverflow.com/questions/48585691/problems-with-between-localdate-predicate – Krismorte

Trả lời

2

Với LocalDateTimeConverter của tôi, tôi chỉ cố gắng greaterThanOrEqualTolessThan để kiểm tra một loạt LocalDateTime như

CriteriaBuilder cb = em.getCriteriaBuilder(); 
CriteriaQuery<Meal> query = cb.createQuery(Meal.class); 
Root<Meal> m = query.from(Meal.class); 
query.select(m); 
query.where(
    cb.greaterThanOrEqualTo(m.<LocalDateTime> get(Meal.FIELD_WHEN), cb.literal(begin)), 
    cb.lessThan(m.<LocalDateTime> get(Meal.FIELD_WHEN), cb.literal(end)) 
    ); 

return em.createQuery(query).getResultList(); 

và thậm chí

cb.between(m.<LocalDateTime> get(Meal.FIELD_WHEN), cb.literal(begin), cb.literal(end)) 

công trình như mong đợi. Chính xác những gì đang gây rắc rối với mã của bạn? Có thể thiếu <LocalDateTime>?

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