Hibernate不会将AUTO_INCREMENT列填充为复合PK,bug或反特征的一部分吗?

时间:2011-02-15 12:23:58

标签: mysql hibernate auto-increment composite-primary-key

我发现Hibernate和复合键有问题,其中一列自动递增。

我正在使用MySQL和由2列GID和LANG组成的主键。 GID列设置为AUTO_INCREMENT。 Insert正在工作,hibernate插入新行,当GID为null时,MySQL会添加auto_generated id。但是,Hibernate不会将给定的对象中的GID字段设置为持久。

我听说通常与使用复合主键和hibernate有关的问题,所以我问这是否是hibernate中的错误,还是开发人员预先设置的反功能(因为没有实现) ?

2 个答案:

答案 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