从Hibernate 3.6升级到5.2。一些旧的测试已经停止工作,其中一个是在插入前后的自动增量列中比较max id(max(id)之前应该是max(id)+1之后)。
我们使用H2作为内存数据库,我们还没有升级H2。
我们的问题是以前,当测试由于某种原因回滚时,数据库中的行当然被删除了,但是自动增量列也被重置了,所以如果执行插入但是失败了(例如由于某些约束),下次生成的自动增量ID将是相同的。
升级到5后,情况不再如此,我无法理解原因。
我们必须从
更改ID列@GeneratedValue(strategy = GenerationType.AUTO)
到
@GeneratedValue(
strategy = GenerationType.AUTO,
generator = "native")
@GenericGenerator(
name = "native",
strategy = "native")
(好解释here)
我已经尝试调试Hibernate" IdentifierGeneratorHelper",它似乎只返回插入后来自H2的int。但H2并没有改变!
指针会很棒。
免责声明:我知道你不应该依赖autoincrement int值。这些是旧的测试,我只是想确保我理解Hibernate5带来的所有更改。