首页 > 解决方案 > 单向 @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连接表创建唯一索引?

标签: spring-data-jpaone-to-many

解决方案


这是意料之中的,一对多的关系将两个不同的实体连接在一起。当您不明确执行此操作时,JPA 默认会实现此功能。这就是为什么您有一个包含两个实体的 id 的连接表。


推荐阅读