春季数据查询日期时间,仅包含日期

2022-09-04 05:25:56

我有这个数据模型

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日加入的成员),但问题是在我的数据库上,成员资格日期有时间。如何忽略时间并检索给定日期的所有用户?


答案 1

不幸的是,对于JodaTime,解决这个问题的唯一方法是使用关键字并使用两个实例来弥补这一天。BetweenDateTime

interface CustomerRepo extends Repository<CustomerModel, Long>{

  List<CustomerModel> findByMemberShipDateBetween(DateTime start, DateTime end);
}

如果您的域模型在内部使用Java,则可以使用以下样式:Date

interface CustomerRepo extends Repository<CustomerModel, Long>{

  List<CustomerModel> findByMemberShipDate(@Temporal(TemporalType.DATE) Date date);
}

注释不是自定义的Spring Data JPA,因为目前不允许在参数上使用普通的JPA。不幸的是,这仅适用于Java的原因是当前JPAPI的限制。上的方法仅采用 类型的 for 参数。我们可以尝试在参数绑定上转换JodaTime对象,但我想持久性提供者会因为类型不匹配而拒绝这一点( VS.@TemporalDatesetParameter(…)QueryTemporalTypeDateDateDateTime


答案 2

您可以执行一些解决方法:创建 DateTime dayBegin 和 DateTime dayEnd,例如 2013-07-04 00:00:00 和 2013-07-04 23:59:59,然后通过查询获取所需的对象:

List<CustomerModel> findByMembershipBetween(DateTime dayBegin, DateTime dayEnd);

推荐