我发现Hibernate和复合键有问题,其中一列自动递增。
我正在使用MySQL和由2列GID和LANG组成的主键。 GID列设置为AUTO_INCREMENT。 Insert正在工作,hibernate插入新行,当GID为null时,MySQL会添加auto_generated id。但是,Hibernate不会将给定的对象中的GID字段设置为持久。
我听说通常与使用复合主键和hibernate有关的问题,所以我问这是否是hibernate中的错误,还是开发人员预先设置的反功能(因为没有实现) ?
答案 0 :(得分:5)
3.5.6-Final的Hibernate Annotations Reference Guide(第2.2.3.2.4节。部分标识符生成)表示可以将序列用于复合id的一部分。
2.2.3.2.4。部分标识符生成
Hibernate支持自动 生成一些标识符 属性。只需使用 一个或多个@GeneratedValue注释 几个id属性。
警告: Hibernate团队一直觉得 从根本上说这样的结构 错误。尽力修复数据模型 在使用此功能之前。
(在Docu中有一个例子!)
但是partenon也是正确的:同一版本的Hibernate Reference Guid(第8.4节。作为复合标识符的组件)表示不可能(对于xml)。
您无法使用IdentifierGenerator生成复合键。 相反,应用程序必须分配自己的标识符。
我不知道Annotation和XML映射之间是否存在差异。
<irony>
我开始越来越喜欢休眠了。</irony>
答案 1 :(得分:1)
这不是一个错误。这是所需的行为,您可以在文档中看到:
您无法使用IdentifierGenerator生成复合键。相反,应用程序必须分配自己的标识符。
http://docs.jboss.org/hibernate/stable/core/reference/en/html/components.html#components-compositeid