#java #hibernate #spring-data-jpa
#java #спящий режим #spring-data-jpa
Вопрос:
У меня есть один пользователь класса и другая роль. Внутри пользовательского класса я сохраняю объекты роли как
@ManyToMany(fetch = FetchType.LAZY, cascade = {CascadeType.ALL})
@JoinTable(name = "user_roles",
joinColumns = @JoinColumn(name = "user_id"),
inverseJoinColumns = @JoinColumn(name = "role_id"))
private Set<Role> roles = new HashSet<>();
Теперь, когда я запускаю свое приложение с show-sql, установленным в true, я вижу следующую инструкцию sql в своей консоли.
Hibernate: alter table user_roles add constraint FKh8ciramu9cc9q3qcqiv4ue8a6 foreign key (role_id) references roles (id)
Hibernate: alter table user_roles add constraint FKhfh9dx7w3ubf1co1vdev94g3f foreign key (user_id) references users (id)
Мой вопрос в том, почему я не вижу никакой каскадной операции в операторе alter table и как я могу сделать так, чтобы в параметре состояния DDL был CascadeType .
Я использую спящий режим 5.4.22.
Ответ №1:
Параметр CascadeType
JPA / Hibernate совершенно не связан с cascade
параметром ограничений внешнего ключа.
Hibernate реализует каскадную опцию в самом Hibernate, поскольку операции, требующие каскадирования, во многих случаях даже не существуют на уровне базы данных, например, сохраняются и объединяются.
Комментарии:
1. Могу ли я каким-либо образом сделать так, чтобы таблица базы данных имела какой-либо каскадный тип через hibernate? Или учитывая, что, если я объявлю каскадный тип, как указано выше, I hibernate позаботится о самих каскадных операциях?
2. > Есть ли какой-либо способ сделать так, чтобы таблица базы данных имела какой-либо каскадный тип через hibernate? Нет, но вы все равно не должны создавать свою схему через Hibernate, по крайней мере, не в производстве.
3. > учитывая, что, если я объявлю каскадный тип, как указано выше, I hibernate позаботится о самих каскадных операциях? ДА.