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,并确保您的代码生成的变量是正确的。
我对这一切都很缺乏经验,对此我真的很困惑。我正在做一个愚蠢的餐厅午餐菜单副项目。我想在我的 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,并确保您的代码生成的变量是正确的。