java - 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
解决方案
推荐阅读
- sql - 为什么优化器选择一个 keylookup 而不是 2 个单独的查询?
- python - 如何在新选项卡中打开网站中的每个产品,以便通过 Python 使用 Selenium 进行抓取
- c++ - CMake + JWAsm 集成示例?
- arrays - 将函数中的 foreach 循环中的值放入数组中
- python - 数百万对单个 int 与一批(2 到 100)个 int 配对的最佳数据类型(就速度/RAM 而言)
- python - 为什么我的抓取脚本返回空结果
- r - Excel:合并数据集中的重复列
- java - 排序数组与哈希表:在日历应用程序中搜索一系列日期时,哪种数据结构更有效?
- javascript - Set-cookie 标头不存在于前端,但在使用 ARC 或 Wireshark 进行测试时存在
- javascript - 如何更改类中元素的样式