我的应用程序使用每个租户数据库多租户,每个租户都有一个时区。
我不想使用时间戳,因为我不希望数据库处理时区转换,但是我想做的是在ZonedDateTime和MySQL DateTime之间进行转换。
在我的应用程序中,我像这样检索租户的当前时间:
ZonedDateTime.of(LocalDateTime.now(), tenant.getTenantZoneId());
我想将其写入数据库,因为分区日期时间会显示出来(即应用了时区和夏令时)。
从数据库中读取数据后,不必进行这种转换,我可以假设所有日期时间都为时区。
我该如何进行初始翻译?以及如何通过JPA提供程序(尤其是休眠状态)以一种不错的方式做到这一点
答案 0 :(得分:2)
如果我理解的正确,您想将ZonedDateTime
写入MySQL的DATETIME
类型,但不保留区域ID等。如果是这样,您只想将其写入LocalDateTime
如果您的驱动程序足够新,那么只需使用LocalDateTime
将PreparedStatement.setObject
写入数据库即可。
preparedStatement.setObject(index, zonedDateTime.toLocalDateTime());
至于阅读,ResultSet.getObject
应该起作用:
LocalDateTime localDateTime = resultSet.getObject(index, LocalDateTime.class);
ZonedDateTime zonedDateTime = ZonedDateTime.of(localDateTime, tenant.getTenantZoneId());