使用mariaDB进行的Hibernate在映射表中生成主键

时间:2019-04-04 15:14:15

标签: mysql hibernate spring-boot mariadb hibernate-mapping

您需要有关Hibernate上MariaDB的一些指导和帮助,我在两个不同的表之间有很多映射,但是在启动服务器时,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 个答案:

答案 0 :(得分:0)

PRIMARY KEY UNIQUE键。

page_childstep中的索引是最佳的。

  • 使用PK可以有效地从子步骤转到页面。
  • INDEX可以有效地从页面转到子步骤。

注意:在InnoDB中,INDEX隐式包括PK的列。因此,INDEX(page_id)实际上是(page_id, childstep_id)排序的BTree。

({BIGINT是严重的过度杀伤力; FK付出了一些努力。但这是其他主题。)