Hibernate多个id属性无法正常工作

时间:2015-05-18 09:46:57

标签: java hibernate foreign-keys primary-key

我有一个具有复合ID的实体,我使用hibernate的多个id属性而没有标识符类型,如下所示:

@Entity
class MyEntity  implements Serializable {

   @Id
   private Long id1;

   @Id
   private Long id2;

   //... Getters , setters , hashcode , equals ...
}

问题在于我的数据库:id1 = 1,id2 = 2

如果我想添加一行:id1 = 2,id2 = 2

我收到错误ConstraintViolationException:重复条目' 2'对于密钥< id2'

我正在使用hibernate 4.1.7, 文档链接:http://docs.jboss.org/hibernate/orm/4.1/manual/en-US/html_single/#mapping-declaration-id

更新

我正在讨论特定于Hibernate的解决方案:将多个属性映射为@Id属性,而不将外部类声明为标识符类型

2 个答案:

答案 0 :(得分:0)

使用EmbeddedId。请参阅this

答案 1 :(得分:0)

问题很可能不是您的代码,而是您的数据库架构。在不知道你正在使用什么DBMS以及MyEntity的表格上的约束/索引的情况下,我们无法肯定地说出来。不过我的猜测是你有这样的东西:

CREATE UNIQUE INDEX ON my_entity (id1);
CREATE UNIQUE INDEX ON my_entity (id2);

这要求每个列独立地只包含唯一值,当你真正想要这样的东西时:

CREATE UNIQUE INDEX ON my_entity (id1, id2);

允许每列包含相同值的重复项,只要两列的组合都是唯一的。