Hibernate with mariaDB 在映射中生成键 Table
Hibernate with mariaDB generate Key in Mapping Table
您好,需要一些关于 MariaDB 和 Hibernate 的指导和帮助,我在两个不同的 table 之间有很多映射,但是当启动服务器时,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;
}
虽然我手动编写了 table 服务器启动时休眠更改。
修改后的table是这样的
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
一个PRIMARY KEY
是一个 UNIQUE
键。
page_childstep
中的索引是最优的。
- PK 允许高效地从子步骤到页面。
INDEX
允许高效地从页面到子步骤。
注意:在 InnoDB 中,INDEX
隐式包含 PK 的列。所以 INDEX(page_id)
实际上是由 (page_id, childstep_id)
.
排序的 BTree
(BIGINT
太过分了;FK 需要一些努力。但这些是其他话题。)
您好,需要一些关于 MariaDB 和 Hibernate 的指导和帮助,我在两个不同的 table 之间有很多映射,但是当启动服务器时,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;
}
虽然我手动编写了 table 服务器启动时休眠更改。 修改后的table是这样的
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
一个PRIMARY KEY
是一个 UNIQUE
键。
page_childstep
中的索引是最优的。
- PK 允许高效地从子步骤到页面。
INDEX
允许高效地从页面到子步骤。
注意:在 InnoDB 中,INDEX
隐式包含 PK 的列。所以 INDEX(page_id)
实际上是由 (page_id, childstep_id)
.
(BIGINT
太过分了;FK 需要一些努力。但这些是其他话题。)