我需要为具有2列INSERT INTO USERS_CONTACTS(user_id, contact_id) VALUES(1, 5);
INSERT INTO USERS_CONTACTS(user_id, contact_id) VALUES(5, 1);
我需要存储用户的联系人列表。我需要使id为1的用户可以拥有id为5的联系人用户,但是用户5也可以拥有id为1的联系人用户(但他不是)。
我需要做以下插入:
@Entity
public class User{
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "ID", columnDefinition = "serial")
private long id;
@OneToMany
@JoinTable(name = "USERS_CONTACTS",
joinColumns = @JoinColumn(name = "USER_ID"),
inverseJoinColumns = @JoinColumn(name = "CONTACT_ID"))
private List<User> contacts;
// ...
}
现在我收到了这个错误:
不成功:INSERT INTO USERS_CONTACTS(user_id,contact_id) 价值观(2,3)2017-12-05 15:00:15.146错误14268 --- [主要] org.hibernate.tool.hbm2ddl.SchemaExport:错误:重复键值 违反了唯一约束“uk_j9ggomsdbjte1eqfo5e61vh8a”
以下是我在JPA中用户的关系实现:
spring.jpa.show-sql = true
spring.jpa.hibernate.ddl-auto = create-drop
spring.jpa.properties.hibernate.dialect = org.hibernate.dialect.PostgreSQLDialect
spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect
spring.jpa.hibernate.naming.physical-strategy=org.hibernate.boot.model.naming.PhysicalNamingStrategyStandardImpl
你能告诉我如何解决它吗?我正在使用Postgre 9.5。感谢。
修改
对于hibernate,我有以下属性:
int
答案 0 :(得分:1)
尝试自己解决此问题。
也许,您会注意到contact_id
因uk_j9ggomsdbjte1eqfo5e61vh8a
约束而变得独一无二。原因是对于@OneToMany
关系,孩子必须只有一个父母。
我认为你需要@ManyToMany
关系。
答案 1 :(得分:0)
我认为uk_j9ggomsdbjte1eqfo5e61vh8a
是以前版本的遗留物。
如果是这样,那么只需删除约束:
alter table USERS_CONTACTS drop constraint uk_j9ggomsdbjte1eqfo5e61vh8a;
答案 2 :(得分:-1)
该表上一定不能有唯一索引!删除该索引,它应该工作。