Hibernate с mariaDB генерировать ключ в таблице сопоставления - PullRequest
0 голосов
/ 04 апреля 2019

Привет, мне нужны некоторые рекомендации и помощь по MariaDB с Hibernate, у меня есть много-много сопоставлений между двумя разными таблицами, но при запуске сервера 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 Ответ

1 голос
/ 10 мая 2019

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

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

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

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

(BIGINT - это излишний перебор; ФК требуют определенных усилий. Но это и другие темы.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...