我试图选择日期字段的值低于给定参数的所有实体。但是,我的代码似乎不起作用。

SomeEntity.java

@Entity
public class SomeEntity {
  @Id @GeneratedValue(strategy = GenerationType.IDENTITY)
  private Long id;

  private ZonedDateTime date = ZonedDateTime.now(ZoneId.of("UTC"));
}


SomeEntityRepository.java

public interface SomeEntityRepositoryextends CrudRepository<SomeEntity, Long> {
    /**
     * Get all SomeEntity created before :until
     */
    @Query("Select e from SomeEntity e where e.date < :until")
    List<SomeEntity> findAllUntil(@Param("until") ZonedDateTime until);
}


我的问题是这样的:

我将有一个SomeEntity对象,日期为2019-08-31T10:00:00.000+02:00until的值为2019-08-24T10:00:00.000+02:00(提前7天)

但是,该对象仍从查询中返回。

我正在使用PostgreSQL 9.6

最佳答案

并非每个JDBC驱动程序都支持它。您可以使用以下解决方案之一:


使用时间戳而不是ZonedDateTime。
使用正确的驱动程序并遵循其配置要求。例如,对于Oracle,您可能需要指定转换器:


    @Convert(converter=OracleZonedDateTimeSeriliazer.class)
    private ZonedDateTime date = ZonedDateTime.now(ZoneId.of("UTC"));


对于其他数据库,您可能需要实现这样的转换器并通过@Convert指定它。

09-26 03:12