Спящий режим не добавляет каскадный тип в инструкцию SQL

#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 позаботится о самих каскадных операциях? ДА.