Hibernate 不会填充作为复合 PK、bug 或反功能的一部分的 AUTO_INCREMENT 列?

2024-03-05

我发现 Hibernate 和复合键存在问题,其列之一自动递增。

我正在使用 MySQL 和由 2 列组成的主键,GID 和 LANG。 GID 列设置为 AUTO_INCRMENT。插入工作正常,hibernate 插入新行,MySQL 在 GID 为空时添加自动生成的 id。但是,Hibernate 不会在给定的对象中设置 GID 字段以进行持久化。

我听说过在休眠中使用复合主键通常会出现问题,所以我问这是否是休眠中的一个错误,或者是开发人员预谋留下的反功能(不会实现,因为没有)?


The Hibernate 注解参考指南 http://docs.jboss.org/hibernate/stable/annotations/reference/en/html_single/3.5.6-Final(第 2.2.3.2.4 节。部分标识符生成)表示可以将序列用于复合 id 的一部分。

2.2.3.2.4。部分标识符生成

Hibernate 支持自动 一些标识符的生成 特性。只需使用 一个或多个上的 @GenelatedValue 注释 几个 id 属性。

警告: Hibernate 团队一直觉得 这样的结构从根本上来说是 错误的。努力修复你的数据模型 在使用此功能之前。

(文档中有一个例子!)

But partenon https://stackoverflow.com/questions/5003596/hibernate-does-not-fill-auto-increment-column-being-part-of-composite-pk-bug-or/5003993#5003993也是正确的:Hibernate 参考指南 http://docs.jboss.org/hibernate/stable/core/reference/en/html/components.html#components-compositeid(第 8.4 节。组件作为复合标识符)对于同一版本来说这是不可能的(对于 xml)。

您不能使用 IdentifierGenerator 生成复合键。 相反,应用程序必须分配自己的标识符。

我不知道Annotation和XML映射之间是否有区别。

<irony>我开始越来越喜欢hibernate了。</irony>

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Hibernate 不会填充作为复合 PK、bug 或反功能的一部分的 AUTO_INCREMENT 列? 的相关文章

随机推荐