Java Spring JpaRepository 自定义查询在 windows 中有效,但在 raspberry pi 中无效(debian?)

Java Spring JpaRepository custom query works in windows but not in raspberry pi (debian?)

我对这一切都很缺乏经验,对此我真的很困惑。我正在做一个愚蠢的餐厅午餐菜单副项目。我想在我的 raspberry pi.

上 运行 一点 java spring 服务器

我 运行 在我的 windows 机器和 raspberry pi 机器上安装 OpenJDK-11 和 Postgres-11。

以下自定义查询适用于 windows 但不适用于我的 pi。

public interface RestaurantMenuRepository extends JpaRepository<RestaurantWeek, Long> {
    List<RestaurantWeek> findByWeekNumber(int weekNumber);
}

知道为什么吗?

我也试过

@Query(value = "SELECT * FROM Week w WHERE w.week_number = :weekNumber", nativeQuery = true)
RestaurantWeek findWeekByWeekIdentifierParamNative(@Param("weekNumber") Integer weekNumber);

Optional<RestaurantWeek> week = this.restaurantMenuRepository.findById(id);

两者都适用于我的 windows 电脑,但适用于 pi。因此,似乎发生了一些奇怪的事情。没有错误被抛出。

WeekNumber 是一列。在 Windows 上,它 returns 给定周数匹配的周列表,但在 pi 上,列表始终为空,即使应该有一个匹配。

我还使用了 JpaRepository 中的其他方法,例如 .findAll().save(),它们在这两种方法上都工作得很好,数据被保存并且 returns 当前数据库中的所有内容都只是美好的。只是我的自定义查询在 raspberry pi.

上不起作用

提前致谢。

好的,我自己解决了。问题是当我使用日历 class 查找当前周时。出于某种原因,即使我是 运行 相同的代码

public static int GetCurrentWeek(){
    return Calendar.getInstance().get(Calendar.WEEK_OF_YEAR);
}

在多个地方,一次是检查数据库中是否存在当前周,一次是在我保存到数据库时生成周数,第三次是获取当前周。保存到数据库时,它给了我正确的周数。从数据库查询时,它给了我当前周数 + 1。这只发生在 raspberry pi,而不是 windows。我通过添加大量日志记录来查看每个变量发现了问题,并注意到它正在查询错误的周数,这显然在数据库中不存在,因为它用正确的数字保存了周数。

我改用 java.Time

public static int GetCurrentWeek(){
    return LocalDate.now().get(WeekFields.ISO.weekOfWeekBasedYear());
}

每个场景中 returns 正确且相同的周数。

所以我想 TL:DR 不要使用 java.util.Calendar,使用 java.time,并确保您的代码生成的变量是正确的。