我搜索一种方法来获取在 Postgresql 数据库中 TIMESTAMPTZ 类型的字段中保存的特定 LocalDateTime 日期创建的对象列表。
为此,我尝试使用 JpaRepository:
List<Object> findByCreationDate(LocalDate date);
但我得到错误:
java.lang.IllegalArgumentException: Parameter value [2020-12-12] did not match expected type [java.time.LocalDateTime (n/a)]
我也尝试自己编写查询,结果相同。
到目前为止我想到的解决方案:
在 Java 中获取所有对象和过滤器(但我不想去那里,所以没有)
要在 LocalDateTime 中转换 LocalDate 参数(但我假设在这种情况下我只会看到在同一时间创建的对象,所以不会。只有当我确定时间字段是午夜时,我才会考虑此选项)。
创建一个方法
findByCreationDateBetween(LocalDateTime startOfTheDay, LocalDateTime endOfTheDay)
(有趣的选项,但我想在不修改 LocalDate 的情况下进行查询,并在一天开始和结束时将其转换为 LocalDateTime。)
我还试图找到一些能够在查询中“投射” LocalDate 中的 LocalDateTime 或比较 LocalDate 和 LocalDateTime 的年、月和日的函数,但没有成功。 creationDate 的类型应保持为 LocalDateTime 和 TIMESTAMPTZ 类型的数据库字段。
是否还有其他 Jpa @Query 替代方案,总的来说,这种情况下最好的方法是什么?
原文由 user3450862 发布,翻译遵循 CC BY-SA 4.0 许可协议
使用发布后迅速删除的答案(我必须使用列而不是属性名称,将查询标记为 nativeQuery 并选择“.*”以避免
org.postgresql.util.PSQLException: The column name id was not found in this ResultSet
错误),我找到了这个解决方案:或者,按照 这个答案,我成功地测试了第二个解决方案: