2016-01-30 8 views
7

私は( 'LOCALDATE' と他の人の間で 'LocalDateTimeを' タイプを使用して)新しいJava 8日付&時間APIに移植するJava Webアプリケーションを試してみてくださいJPA2基準とJava 8日付と時刻API

。 util.DateはJPA2基準APIで日付の結果セットをフィルタリングするために使用できます。典型的には、述語を追加することによってこれを行う。

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

今JPA2はまだ新しいJava 8日付&時間のAPI(LOCALDATEとのLocalDateTime)をサポートしていません。私の質問に今すぐブログhttp://www.thoughts-on-java.org/persist-localdate-localdatetime-jpa/

に記載されたエンティティを扱う独自の「属性コンバーター」、ですでに達成することができます:私はLOCALDATEに結果セットをフィルタリングするためにJPA2基準APIにLOCALDATEとのLocalDateTimeを使用する方法の代わりにDate?以前に使用されていた 'between'はLocalDateインスタンスでは機能しません。私LocalDateTimeConverter

+1

JPA2.2これを修正しますか? – Krismorte

+0

@Krismorte [https://www.thoughts-on-java.org/whats-new-in-jpa-2-2/](https://www.thoughts-on-java.org/whats- new-in-jpa-2-2 /)あなたは正しいようです。まだ試してみませんでしたが –

+0

私もこの問題に直面しています。私の質問は です。https://stackoverflow.com/questions/48585691/problems-with-between-localdate-predicate – Krismorte

答えて

2

は、私は予想通り

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(); 

とさえ

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

作品のようなLocalDateTime範囲を確認するためにgreaterThanOrEqualTolessThanを試してみました。正確にあなたのコードに問題を引き起こしているのは何ですか?おそらく<LocalDateTime>が存在しないでしょうか?