我有一个表与一个简单的int id列在SQL Server中具有标识自动增量.
实体的Id用@Id和注释@GeneratedValue
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "id", length = 4, precision = 10, nullable = false)
private Integer id;
Run Code Online (Sandbox Code Playgroud)
在SQL Server中,该列已正确设置为Identity with Seed并且Increment等于1.
当我尝试持久化该实体的实例时,Hibernate尝试查询hibernate_sequence表以获取ID值.由于我没有在我的架构中创建该表,我收到一个错误:
could not read a hi value: com.microsoft.sqlserver.jdbc.SQLServerException: Invalid object name 'MySchema.hibernate_sequence'
如果我将生成类型更改为IDENTITY,一切都按预期工作
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id", length = 4, precision = 10, nullable = false)
private Integer id;
Run Code Online (Sandbox Code Playgroud)
我无法以这种方式更改它,因为我的应用程序将在MS SQL和ORACLE上运行,后者不支持自动增量列.
据我所知,如果底层数据库对它有支持,AUTO类型应该使用自动增量行为,所以我不知道为什么不工作.
更新:
我花了一些时间,但我能够准确理解发生了什么.
我正在使用具有以下行为的旧数据库:
以下是使用一些id生成策略的结果:
所以我需要弄清楚的是将该实体配置为: …