2016-10-06 2 views
1

Хорошее время суток! У меня есть некоторые проблемы с созданием отношения «Много-ко-многим» с Hibernate. Он создает в таблицу соединения уникальное ограничение:Отношение Hibernate Many-To-Many создает ненужное уникальное ограничение

"uk_bapa98k9j6y66sqniad6k680l" UNIQUE CONSTRAINT, btree (users_id)

Так что я могу иметь только одну строку для конкретного пользователя в этой таблице, попытка вставить еще одну строку с тем же user_id вызывает ошибку:

ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - ERROR: duplicate key value violates unique constraint "uk_bapa98k9j6y66sqniad6k680l" Подробности: Key (users_id)=(1) already exists

Как могу ли я запретить 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", [email protected](name="projects_id"), [email protected](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; 
    } 

ответ

0

Когда вы комментируете поле объекта с помощью @Id, идентификатор должен быть уникальным. Таким образом, USERS.user_id должен иметь ограничение Unicity независимо от вашего отношения «Множество к многим».

+0

users.user_id имеет уникальное ограничение, и это нормально, потому что это первичный ключ. Но почему он имеет уникальную в таблице соединений? –

0

Вы не должны использовать @ElementCollection для сбора сущностей, он используется для сбора встраиваемых или простых типов.

+0

Если я удалю эту аннотацию, это вызовет новое исключение: javax.persistence.PersistenceException: org.hibernate.PersistentObjectException: отдельный объект, переданный для сохранения –

Смежные вопросы