Unidirectional @OneToMany在jon表上创建了唯一的索引,这是不期望的

问题描述 投票:0回答:2

我对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] = _
}

这里是在数据库中创建的内容:

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-jpa one-to-many
2个回答
0
投票

这是可以预期的,一对多关系将两个不同的实体连接在一起。默认情况下,如果您未明确执行JPA,则JPA会实现此目的。这就是为什么您有一个包含两个实体的ID的联接表的原因。


0
投票

Jpa自动创建联接表。

您可以使用@JoinColumn避免额外的联接表问题。@JoinColumn注释可帮助Hibernate查明父级中有一个外键列。

© www.soinside.com 2019 - 2024. All rights reserved.