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