2016-02-29 1 views
0

Am использованием springboot с спячки,Почему @JoinTable (имя = "USER_ROLE") не позволяет несколько user_id с ROLE_ID

классы Мой Entity выглядит следующим образом:

@Entity 
@Table(name="tbl_user") 
public class User { 

    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="user_Id") 
    private long userId; 

    @Column(name="userName") 
    private String userName; 

    @Column(name="passWord") 
    private String passWord; 

    @OneToMany(cascade = CascadeType.ALL) 
    @JoinTable(name="user_role") 

private Collection<Role> roleList; 

Мой второй объект выглядит, как показано ниже:

@Entity 
@Table(name="tbl_role") 
public class Role { 

    @Id @GeneratedValue(strategy=GenerationType.AUTO) 
    @Column(name="role_Id") 
    private long roleId; 

    @Column(name="roleName") 
    private String roleName; 

Когда я вставляю первый пользователь с ролью manager(pkid=1), admin(pkid=2) его успеха, но в то время как я пытался вставить 2-й пользователь с ролью, как Manager*pkid=1, admin(pkid=2, serviceUser(pkid=3) это не позволяет мне вставить второй пользователю ниже исключением

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Дублирование запись «2» для ключа «UK_ixctfj5iq0enl7iktlpo7wxct»

Может кто-нибудь помочь мне, почему это ограничение получение создания при создании таблиц, как я могу вставить второго пользователя в БД?

ответ

0

Если вы используете OnetoMany на role_list вы фактически говорите, что один User будет указывать на многие Roles и что Role будет указывать только один User. Это будет выполняться с помощью ограничения ключа unique, размещенного на join table. Если вы распечатали инструкции SQL, вы увидите ее, когда будет создан schema. Что-то вдоль линий:

alter table user_role add constraint UK_ixctfj5iq0enl7iktlpo7wxct unique (role_id) 

В вашем требовании, у вас есть один Role используется многими Users. Ваша роль администратора primary key - это 2, и вы хотите иметь возможность назначить ее нескольким пользователям. Ваши отношения - это ManyToMany для role_list.

@ManyToMany(cascade = CascadeType.ALL) 
@JoinTable(name="user_role") 
private Collection<Role> roleList; 

При изменении аннотаций, вы все еще есть join table, но никаких ограничений не будет добавлен.

+0

Спасибо, Николас, ты мне помог! – Vasu

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