簡體   English   中英

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM