我们正在将应用程序从 spring-boot 2.4.3 升级到 2.7.0。Hibernate核心版本是5.6.9.Final。2.7.0是第一个使用H2数据库2.1.212的版本,我们正在使用它进行测试。我根据他们的迁移到 2.0 的指南做了一些更改,但我遇到了一个尚未找到解决方案的问题。
在一些集成测试中,我们在该类中运行测试之前使用 SQL 脚本插入数据。例如,脚本在表中插入 3 个项目,然后测试插入第 4 个项目并更新已存在的最初 3 个项目之一。
执行插入的测试失败并出现以下错误
DataIntegrityViolationException. Error message: could not execute statement; SQL [n/a]; constraint ["PRIMARY KEY ON studio.exercise(id) ( /* key:1 */ 1, 'Test Exercise', FALSE, 'TEST', NULL, 1, 'TEST', TIMESTAMP '2021-01-01 16:00:13', NULL, NULL)";
SQL statement: insert into exercise (id, created_by, created_on, modified_by, modified_on, archived, image, organization_id, title, type) values (default, ?, ?, ?, ?, ?, ?, ?, ?, ?) [23505-212]]; nested exception is org.hibernate.exception.ConstraintViolationException: could …Run Code Online (Sandbox Code Playgroud) 我研究了使用 Java SDK 存储日期和时间的 DynamoDB 选项。据我所知,Java8 LocalDate 和 LocalDateTime 需要自定义转换器,而对于旧的 Date、Calendar 和 Joda 时间 LocalDateTime 有一些注释。
根据文档,@DynamoDBTypeConvertedTimestamp 支持标准日期类型转换,例如 java.util.Calendar、Long。@DynamoDBTypeConvertedEpochDate 可用于将日期、日历和 org.joda.time.DateTime 转换为数值。
同时,如果我不在 Date 字段上添加任何注释,它会被保存,就像它上面有 @DynamoDBTypeConvertedTimestamp 一样,甚至范围查询也能成功工作。
有没有人有知识来解释不同的可能方法,并就从 DynamoDB 存储和检索 Java 日期和时间对象的最佳方法发表意见?