Переход в спящий режим с помощью MariaDB генерирует ключ в таблице сопоставления

#mysql #hibernate #spring-boot #mariadb #hibernate-mapping

#mysql #переход в спящий режим #весенняя загрузка #mariadb #переход в спящий режим-отображение

Вопрос:

Привет, нужны некоторые рекомендации и помощь по MariaDB с Hibernate, у меня есть сопоставление «многие ко многим» между двумя разными таблицами, но при запуске server hibernate генерирует первичный ключ вместо уникального ключа, не знаю почему? есть ли проблема с диалектом? Сущность выглядит следующим образом.

 @ManyToMany(fetch = FetchType.LAZY,cascade=CascadeType.REFRESH)
@JoinTable(name = "step_childpage", 
joinColumns = @JoinColumn(name = "step_id"), 
inverseJoinColumns = @JoinColumn(name = "childpage_id"),
uniqueConstraints= {@UniqueConstraint(name="UK_step_childpage",columnNames= {"childpage_id","step_id"})},
foreignKey=@ForeignKey(name="FK_step_childpage_step_id"),
inverseForeignKey=@ForeignKey(name="FK_step_childpage_page_id")
)
public Set<BotPage> getChildPages() {
    return childPages;
}
public void setChildPages(Set<BotPage> childPages) {
    this.childPages = childPages;
}
  

и хотя я вручную написал таблицу, гибернация изменяется при запуске сервера.
модифицированная таблица выглядит следующим образом.

 CREATE TABLE `page_childstep` (
    `page_id` BIGINT(20) NOT NULL,
    `childstep_id` BIGINT(20) NOT NULL,
    PRIMARY KEY (`childstep_id`, `page_id`),
    INDEX `FK_page_childstep_page_id` (`page_id`),
    CONSTRAINT `FK_page_childstep_page_id` FOREIGN KEY (`page_id`) REFERENCES `page` (`id`),
    CONSTRAINT `FK_page_childstep_step_id` FOREIGN KEY (`childstep_id`) REFERENCES `teststep` (`id`)
)
COLLATE='utf8_general_ci'
ENGINE=InnoDB
  

Ответ №1:

A PRIMARY KEY — это UNIQUE ключ.

Индексы в page_childstep являются оптимальными.

  • PK позволяет эффективно переходить от дочернего шага к странице (страницам).
  • INDEX Позволяет эффективно переходить от страницы к дочерним шагам.

Примечание: В InnoDB INDEX неявно включает столбцы PK. Таким образом, INDEX(page_id) фактически это BTree, упорядоченное по (page_id, childstep_id) .

( BIGINT это явный перебор; FKs требует определенных усилий. Но это другие темы.)

Комментарии:

1. По умолчанию innodb создает ключ в таблице сопоставления, а также ускоряет доступ к внешнему ключу да, в долгосрочной перспективе это перегружает любые операции с БД