我们正在将一个应用程序从spring-boot 2.4.3升级到2.7.0。Hibernate核心版本为5.6.9.Final。
2.7.0是第一个使用H2数据库2.1.212的版本,我们正在用它进行测试。
我按照他们的迁移指南做了一些更改,但我遇到了一个问题,至今没有找到解决方案。
在某些集成测试中,我们使用SQL脚本在运行该类中的测试之前插入数据。例如,脚本在表中插入3个项目,然后测试插入第4个项目并更新已经存在的最初的3个项目之一。
进行插入的测试失败,并显示以下错误。
它抱怨无法插入ID为1的项目,因为另一个具有该ID的项目已存在(由脚本插入)。但在之前的H2数据库版本中,这不是问题。
我认为这个帖子与我的有关,但我看不懂提出的解决方案H2数据库中的AUTO_INCREMENT在使用Postman请求时不起作用。
在某些集成测试中,我们使用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 not execute statement
它抱怨无法插入ID为1的项目,因为另一个具有该ID的项目已存在(由脚本插入)。但在之前的H2数据库版本中,这不是问题。
我认为这个帖子与我的有关,但我看不懂提出的解决方案H2数据库中的AUTO_INCREMENT在使用Postman请求时不起作用。
MSSQLServer
兼容模式中启用了基值调整技巧,您可能希望启用它。 - Evgenij RyazanovMode.updateSequenceOnManualIdentityInsertion
改为true
,但这些标志没有得到任何支持,并且可能在任何版本的 H2 中被修改而不发出警告。 - Evgenij Ryazanov