对于映射到HSQLDB中的表的实体中的id字段,我具有以下定义。
... @Id @GeneratedValue(strategy=GenerationType.AUTO) @Column(name = "ID") private Integer id; ...
但这似乎不会生成唯一的ID。而是尝试将null插入列中,这将导致失败。如果我手动创建一个序列和生成策略以使用该序列,那么数据将按预期持久保存。
自动生成策略不是暗示提供者(在这种情况下为hibernate)将自动选择正确的方法并根据需要进行所有繁重的工作(创建序列,使用本机方法或适用于该特定平台的任何方法)吗?我的理解不正确吗?
从理论上讲(它在HSQLDB中默认为IDENTITY),并且对我有用。这提出了以下问题:
org.hibernate.tool.hbm2ddl
这是Foo使用HSQLDB时实体的示例DDL :
Foo
create table Foo ( id bigint generated by default as identity (start with 1), bar varchar(100), primary key (id) )
我使用HSQL DB管理器创建了表。只是正常的创建表地址…就我而言,我没有将id列设置为标识-只是将其设置为主键。
然后您就有了答案,请使用IDENTITY专栏。
IDENTITY
虽然Hibernate确实选择了正确的策略并确实生成了适当的INSERT语句(传递null给预期将保留在IDENTITY列中的id ),但是如果您不使用DDL生成和导出,它将不会创建或更改您的物理模型。能力。
INSERT
null