[英]How to use existing records in many-to-many relation and to avoid unique constraint violation (hibernate)
[英]Hibernate Many-To-Many relation creates unnecessary unique constraint
一天的好时光! 我在使用Hibernate创建多对多关系时遇到了一些问题。 它在连接表中创建唯一约束:
“uk_bapa98k9j6y66sqniad6k680l”UNIQUE CONSTRAINT,btree(users_id)
因此,此表中的特定用户只能有一行,尝试插入另一行,同一个user_id会导致错误:
错误org.hibernate.engine.jdbc.spi.SqlExceptionHelper - 错误:重复键值违反唯一约束“uk_bapa98k9j6y66sqniad6k680l”Подробности:Key(users_id)=(1)已存在
我怎样才能禁止Hibernate在此表中添加唯一约束?
@Entity
@Table(name="Projects", schema="public")
public class Project implements Serializable {
...
@Id
@GenericGenerator(name="increment", strategy="org.hibernate.id.IncrementGenerator")
@GeneratedValue(generator="increment")
@Column(name="project_id")
public Long getId() {
return this.id;
}
...
@ManyToMany(cascade=CascadeType.ALL)
@JoinTable(name="project_users", joinColumns=@JoinColumn(name="projects_id"), inverseJoinColumns=@JoinColumn(name="users_id"))
@ElementCollection(targetClass=User.class)
public Set<User> getUsers()
{
return users;
}
@Entity
@Table(name="Users")
public class User implements Serializable {
...
@Id
@GenericGenerator(name="increment", strategy="org.hibernate.id.IncrementGenerator")
@GeneratedValue(generator="increment")
@Column(name="user_id")
public Long getId() {
return this.id;
}
...
@ManyToMany(mappedBy="users")
public Set<Project> getProjects()
{
return projects;
}
使用@Id注释实体字段时,Id必须是唯一的。 因此,无论您的多对多关系如何,USERS.user_id都应具有Unicity约束。
您不应该使用@ElementCollection
来收集实体,它用于收集可嵌入或简单类型。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.