HSQLDB 的 Hibernate @ generatedvalue

2023-11-23

我对映射到 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(使用前将#替换为@)

HSQLDB 的 Hibernate @ generatedvalue 的相关文章

随机推荐