私はこのデータモデルを持っています
public class CustomerModel{
@Column
@Type(type="org.joda.time.contrib.hibernate.PersistentDateTime")
private DateTime membershipDate;
//Other properties and getters
}
そして、次のレポ
public interface CustomerRepo extends Repository<CustomerModel, Long>{}
私がやりたいのは特定の日付(2013年8月1日に参加したメンバー)のすべてのユーザーを取得しますが、問題は私のDBで、membershipDateに時間があります。時間を無視して特定の日付のすべてのユーザーを取得するにはどうすればよいですか?
残念ながらJodaTimeでは、これを回避する唯一の方法は、Between
キーワードを使用し、1日を構成する2つのDateTime
インスタンスを使用することです。
_interface CustomerRepo extends Repository<CustomerModel, Long>{
List<CustomerModel> findByMemberShipDateBetween(DateTime start, DateTime end);
}
_
ドメインモデルでJava Date
sを内部で使用している場合、このスタイルを使用できます。
_interface CustomerRepo extends Repository<CustomerModel, Long>{
List<CustomerModel> findByMemberShipDate(@Temporal(TemporalType.DATE) Date date);
}
_
_@Temporal
_アノテーションは、Spring Data JPAのカスタムアノテーションではありません。プレーンなJPAアノテーションは現在、パラメーターでは許可されていません。これがJava Date
sでのみ動作する理由は、残念ながら現在のJPAPIの制限です。Query
のsetParameter(…)
メソッドは、 TemporalType
型のパラメーターのDate
。パラメーターバインディングでJodaTimeオブジェクトを変換することもできますが、型の不一致(Date
VS. DateTime
)。
いくつかの回避策を実行できます:たとえば、DateTime dayBeginおよびDateTime dayEndを作成します。 2013-07-04 00:00:00および2013-07-04 23:59:59およびクエリにより必要なオブジェクトを取得します:
List<CustomerModel> findByMembershipBetween(DateTime dayBegin, DateTime dayEnd);
jODAとspring&JPAは実際には良い友達です。
http://blog.netgloo.com/2015/04/06/spring-boot-using-joda-time-on-jpa-entity-with-hibernate/
楽しい