spring-data-jpa - 单向 @OneToMany 在 jon 表上创建唯一索引,这是不期望的
问题描述
我对 JPA 的行为感到困惑。底层数据库是 H2,我正在使用 SpringBoot 和
jpa:
hibernate:
ddl-auto: update
database-platform: org.hibernate.dialect.H2Dialect
这是我的实体:
@Entity
class ChildEntity{
@Id
@GeneratedValue(strategy = GenerationType.SEQUENCE)
var id: Long = _
@OneToMany(fetch = FetchType.EAGER)
var parentEntities: java.util.Set[ParentEntity] = _
}
这是在 DB 中创建的内容:
CREATE INDEX "PUBLIC"."INDEX_C" ON "PUBLIC"."CHILD_ENTITY_PARENT_ENTITIES"("CHILD_ENTITY_ID");
CREATE PRIMARY KEY "PUBLIC"."PRIMARY_KEY_CA" ON "PUBLIC"."CHILD_ENTITY_PARENT_ENTITIES"("CHILD_ENTITY_ID", "PARENT_ENTITIES_ID");
-- why?
CREATE UNIQUE INDEX "PUBLIC"."UK_INDEX_C" ON "PUBLIC"."CHILD_ENTITY_PARENT_ENTITIES"("PARENT_ENTITIES_ID");
为什么它为PARENT_ENTITIES_ID
连接表创建唯一索引?
解决方案
这是意料之中的,一对多的关系将两个不同的实体连接在一起。当您不明确执行此操作时,JPA 默认会实现此功能。这就是为什么您有一个包含两个实体的 id 的连接表。
推荐阅读
- python - 如何从python中的多个键中获取值
- arrays - Laravel 访问常量和 in 常量
- android - onActivityResult() 使用自定义按钮返回空数据,但与返回正确数据的 onBackPressed() 完美配合
- java - 不明白 Linkedlist 节点指针如何指向其他节点?
- java - 未经检查的对类的调用
- javascript - 问题 - Base 64 PDF 字符串未在 IE 11 中呈现
- intellij-idea - 在 IntelliJ IDEA 中撤消 Windows Defender 提示的“不再显示”
- php - Use PHP Associative Array in If Condition
- android - 如何从firebase获取数据?
- javascript - 如何异步查询多条 SQL?