Java hibernate: JPA связь многие ко многим, урок 9!

preview_player
Показать описание
Способ задания связи многие ко многим с помощью аннотаций в java с использованием JPA.
Рекомендации по теме
Комментарии
Автор

достаточно в классе юзер одной записи чтоб сконектиться с класом роль
@ManyToMany
private Set<Role> role = new HashSet<Role>();
так короче и все работает и получится это:
Hibernate: alter table User_Role drop foreign key FK_lnkt0nkij1u1ftngm6h2w5y0g
Hibernate: alter table User_Role drop foreign key FK_dv4w2xni693cg4ibi3fo1fkk6
Hibernate: drop table if exists Role
Hibernate: drop table if exists User
Hibernate: drop table if exists User_Role
Hibernate: create table Role (id bigint not null auto_increment, title varchar(255), primary key (id))
Hibernate: create table User (id bigint not null auto_increment, age integer not null, firstName varchar(255), lastName varchar(255), primary key (id))
Hibernate: create table User_Role (User_id bigint not null, role_id bigint not null, primary key (User_id, role_id))
Hibernate: alter table User_Role add constraint FK_lnkt0nkij1u1ftngm6h2w5y0g foreign key (role_id) references Role (id)
Hibernate: alter table User_Role add constraint FK_dv4w2xni693cg4ibi3fo1fkk6 foreign key (User_id) references User (id)

Victorio
Автор

Как hibernate понимает что в колонку user_id таблицы user_role нужно подставить id пользователя? а в колонку role_id нужно подставить id роли? Это определяется параметрами joinColumns и inverseJoinColumns ? Типа для первой колонки значения берутся из класса в котором описывается эта таблица? А для второй колонки значения id берутся из класса где указано mapped_by ? И можно ли ManyToMany настроить не по id (т.е. не по primare key)?

igorek
Автор

Как при таком дизайне классов-сущностей совершать запросы к одной только лишь таблице с выборкой данных не из всех колонок, а только из одной, допустим только lastname нужны?

EponskijGorodovoij
Автор

а как то без таблицы связки можно все это решить ? ))

SannnSanych
Автор

В таком варианте:
@JoinTable(name="user_role",
у меня выдает ошибку компиляции - "Duplicate annotation of non-repeatable type @JoinColumn. Only annotation types marked @Repeatable can be used multiple times at one target."

А в таком варианте всё работает хорошо:
@JoinTable(name="user_role")

ronny