首页 > 解决方案 > Hibernate 一对一映射创建外键

问题描述

背景:我加载了一个 mysql 实例来运行数据库测试,并使用 Hibernate (spring-data-jpa) 创建了我的模式并针对数据库运行了一些测试。我所有的实体都是通过注释创建的,并在弹簧上下文中加载。

表:我有 2 个表:

MainTable:
   - id (PK)
   - customerId
   ...

ThirdParty:
   - id (PK)
   - customerId (FK: MainTable.customerId)
   - serviceId

这是一个一对一的映射,因为我不想将 serviceId 添加到我的 MainTable。

我的实体设置如下:

@Table
@Entity
public class MainTable {
    @Id
    @Column
    private String id;

    @Column(name = "CUSTOMER_ID")
    private String customerId;

    @OneToOne
    @JoinColumn(name = "CUSTOMER_ID", referencedColumnName = "CUSTOMER_ID")
    private ThirdParty thirdParty;
}

@Table
@Entity
public class ThirdParty {
    @Id
    @Column
    private String id;

    @Column(name = "CUSTOMER_ID")
    private String customerId;

    @Column(name = "SERVICE_ID")
    private String serviceId;
}

我希望 MainTable.thirdParty 可以为空。每当 Hibernate 创建模式时,它都会在 ThirdParty.CUSTOMER_ID 上从 MainTable.CUSTOMER_ID 创建一个 FK 关系,这意味着当我尝试使用 null 第三方持久化 MainTable 时遇到引用完整性问题。

我只是真的希望能够存储可能带有或不带有第三​​方数据的 MainTable 实例。

我不希望 Hibernate 在 ThirdParty.customerId 上创建具有 FK 关系的 MainTable

标签: javaspringhibernatespring-data-jpa

解决方案


推荐阅读