我有一个具有复合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属性,而不将外部类声明为标识符类型
答案 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);
允许每列包含相同值的重复项,只要两列的组合都是唯一的。