Hibernate 如何在@Embeddeble中使用@GeneratedValue作为复合主键?

Hibernate 如何在@Embeddeble中使用@GeneratedValue作为复合主键?,hibernate,primary-key,composite,auto-generate,Hibernate,Primary Key,Composite,Auto Generate,我的数据库中有一个带有主复合键的表,当我使用Hibernate对其建模时,我使用@EmbeddedId&@embeddedable。此复合主键的一列的生成值为@GeneratedValue(strategy=GenerationType.IDENTITY) 当我尝试在数据库中创建两个新对象时,出现如下错误: org.hibernate.NonUniqueObjectException: A different object with the same identifier value was a

我的数据库中有一个带有主复合键的表,当我使用Hibernate对其建模时,我使用
@EmbeddedId
&
@embeddedable
。此复合主键的一列的生成值为
@GeneratedValue(strategy=GenerationType.IDENTITY)

当我尝试在数据库中创建两个新对象时,出现如下错误:

org.hibernate.NonUniqueObjectException: A different object with the same identifier value was already associated with the session : [MyPackage#MyEmbedableClass [MyGeneratedPrimaryKeyValue=null, OtherPrimaryKey=21]]
但当我查看数据库时,我的对象已经创建。我不理解我的错误,也不知道如何解决我的问题

我已经找到了一些类似我的话题,但我还没有找到我问题的答案

  • @实体(name=“认证”)
    @表(name=“认证”)
    公共类认证实现可序列化{
    静态最终长SerialVersionId=-43990774392740963L;
    @嵌入ID
    私人证书pk CertificationPK;
    //其他变量
    //建设者
    //吸气剂/塞特
    //托斯特林
    //hashCode/equals
    }
    @可嵌入
    公共类CertificationPK实现可序列化{
    私有静态最终长serialVersionUID=1433990897506209802L;
    //创建时MyGeneratedPrimaryKeyValue=null
    @GeneratedValue(策略=GenerationType.IDENTITY)
    @NotNull
    @列(name=“CERTIFICATION\u ID”)
    私有整数证书ID;
    //其他变量
    //建设者
    //吸气剂/塞特
    //托斯特林
    //hashCode/equals
    }
    
    提前感谢你的帮助

  • 看起来您不能将
    @GeneratedValue
    @EmbeddedId
    一起使用。你可以在中找到一些解决方法,但对我来说效果不太好

  • 正如文档部分所述,应该可以将
    @GeneratedValue
    @IdClass
    一起使用。但是,由于以下原因,它不起作用

  • 如文件第节所述:

  • 使用复合标识符时,基础标识符属性必须由用户手动分配

    不支持将自动生成的属性用于生成构成复合标识符的基础属性的值

    因此,您不能使用本节所述的任何自动属性生成器,如
    @Generated
    @CreationTimestamp
    @ValueGenerationType
    或数据库生成的值

    尽管如此,您仍然可以在构造复合标识符之前生成标识符属性


    请显示您的映射。@SternK映射是什么意思?当我使用Hibernate对其建模时,我使用@EmbeddedId&@Embeddeble-请显示您是如何建模的it@SternK我更新了我的帖子,如果你需要更多我可以添加。谢谢你的帮助和纠正!