Я проверил ваше сопоставление - это правильно.
Hibernate создает таблицу соединений room_facility
для соединения комнаты с объектами
create table room_facility (
facility_id bigint not null,
room_id bigint not null,
primary key (facility_id, room_id)
)
И добавляет три ограничения к таблице
alter table room_facility
add constraint UK_7agxlay88uohhk0oiulxd8o2f unique (room_id)
alter table room_facility
add constraint F_room_facility_room_id
foreign key (room_id)
references facility
alter table room_facility
add constraint F_room_facility_facility_id
foreign key (facility_id)
references room
Ограничения верны, но имеют запутанные имена.Причина - вы неверно указали имена столбцов соединения.
Вы должны изменить это
@JoinTable(name = "room_facility", joinColumns = @JoinColumn(name = "facility_id"),
inverseJoinColumns = @JoinColumn(name = "room_id"))
На это
@JoinTable(name = "room_facility", joinColumns = @JoinColumn(name = "room_id"),
inverseJoinColumns = @JoinColumn(name = "facility_id"))
Таким образом, ограничения с правильными именами будут
alter table room_facility
add constraint UK_ps5vy16iklc6x2w1etbbt98q7 unique (facility_id)
alter table room_facility
add constraint FKj7d5o0yjvyvev7owenan66mcy
foreign key (facility_id)
references facility
alter table room_facility
add constraint FKt8cyiqxlu6kpr29sa7n1vk4pm
foreign key (room_id)
references room
причина ошибки
Как мы видим, у нас есть уникальное ограничение для facility_id
столбца таблицы объединения room_facility
.Таким образом, у нас не может быть двух комнат с одинаковым Facility
.
. Вы можете попытаться использовать аннотацию @ManyToMany
, если вам нужно иметь одно и то же средство для нескольких комнат.