我对映射到 HSQLDB 中的表的实体中的 id 字段有以下定义。
...
@Id
@GeneratedValue(strategy=GenerationType.AUTO)
@Column(name = "ID")
private Integer id;
...
但这似乎并没有生成唯一的 id;相反,尝试将 null 插入到列中,这会导致失败。如果我手动创建一个序列和生成策略来使用该序列,那么数据将按预期保留。
自动生成策略是否意味着提供者(在本例中为休眠)将自动选择正确的方法并根据需要完成所有繁重的工作(创建序列、使用本机方法或适用于该特定平台的任何方法)?我的理解不正确吗?
自动生成策略是否意味着提供者(在本例中为休眠)将自动选择正确的方法并根据需要完成所有繁重的工作(创建序列、使用本机方法或适用于该特定平台的任何方法)?我的理解不正确吗?
理论上它确实如此(它默认为 HSQLDB 的 IDENTITY)并且它对我有用。这就引出了以下问题:
- 您使用什么方言(以防万一)?
- 您是如何创建该表的?
- 你能显示DDL吗(激活日志记录
org.hibernate.tool.hbm2ddl
如果需要的话)?
- 你如何插入(通过 Hibernate 的 API,对吧?)?
这是实体的示例 DDLFoo
使用 HSQLDB 时:
create table Foo (
id bigint generated by default as identity (start with 1),
bar varchar(100),
primary key (id)
)
我使用 HSQL 数据库管理器创建了该表。只是正常的创建表地址...在我的例子中,我没有将 id 列设置为身份 - 只需将其设置为主键。
然后你就有了答案,使用IDENTITY
柱子。
虽然 Hibernate 确实选择了正确的策略并生成了适当的INSERT
声明(通过null
到 id 中,该 id 预计将被持久化到IDENTITY
列),如果您不使用 DDL 生成和导出功能,它不会创建或更改您的物理模型。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)