spring-boot - 如何从使用@JoinTable 的@OneToOne 迁移到仅使用@OneToOne?
问题描述
我们正在重组我们的服务和数据。我们有 2 个实体Employee
,CostCenter
@Entity
@Table(name = "employees")
data class Employee(
@Id
val id: Long? = null,
@Column(name = "id_dept")
val departmentId: Long,
@Column(name = "business_email_address")
var businessEmailAddress: String? = null,
@OneToOne
@JoinTable(
name = "employee_cost_centers",
joinColumns = [JoinColumn(
name = "employee_id",
referencedColumnName = "id"
)]
)
@JoinColumn(name = "cost_center_id")
var costCenter: CostCenter? = null
)
@Entity
@Table(name = "cost_centers")
data class CostCentre(
@Id
val id: Long,
@Column
var name: String? = null,
@Column(name = "deleted")
var isDeleted: Boolean = false
)
员工表
| id | id_dept | business_email_address |
|----|-------------|------------------------|
| 1 | Finance | finance@example.com |
| 2 | HR | hr@example.com |
| 3 | Development | dev@example.com |
| 4 | Marketing | marketing@example.com |
cost_centers 表
| id | name | deleted |
|-----|-----------------------|---------|
| 10 | FinanceCostCenter | false |
| 20 | HRCostCenter | false |
| 30 | DevelopmentCostCenter | false |
| 40 | MarketingCostCenter | false |
正如我们@JoinTable
在Employee
实体中使用的那样,我们有一个第三张表,其中包含员工和成本中心之间的映射,名称为employee_cost_centers
。employee_cost_centers 表
| cost_center_id | employee_id |
|----------------|-------------|
| 10 | 1 |
| 20 | 2 |
| 30 | 3 |
| 40 | 4 |
现在我们想将成本中心转移到它自己的微服务中。所以cost_centers
表也将移至新服务。我想通过创建一个类似的新实体将表中的costCenter
引用Employee
直接映射到第三个映射表employee_cost_centers
@Entity
@Table(name = "employee_cost_centers")
data class EmployeeCostCenter(
@Id
@Column(name="cost_center_id")
val costCenterid: Long,
@Column(name="employee_id")
val employeeId: Long
)
但是我应该如何在Employee
实体中映射它?我对 JPA/Hibernate 相当陌生。非常感谢专家的任何帮助。
解决方案
代替
@OneToOne
@JoinTable(
name = "employee_cost_centers",
joinColumns = [JoinColumn(
name = "employee_id",
referencedColumnName = "id"
)]
)
@JoinColumn(name = "cost_center_id")
var costCenter: CostCenter? = null
经过
@OneToOne
@JoinColumns([JoinColumn(
name = "employee_id",
referencedColumnName = "id"
)])
var employeeCostCenter: EmployeeCostCenter? = null
或者您可以根据您的设计保持变量名称相同
推荐阅读
- android - 如何获得特定文件夹的权限
- c# - 某些邮件 ID 无法在 C# 中接收邮件
- node.js - 错误:无法将用户序列化到会话中 (Passport.js)
- asp.net-mvc - 从 .Net 应用程序中的 Web.config 重定向 URL
- deep-linking - 无法在 Branch.io 中获取生成的深层链接
- groovy - 如何找到 90% 的价值?
- javascript - 使用 css 和 vue 在单击或选定的项目上显示活动边框
- sql-server - 本地 SQL Server CDC 到 AWS
- java - BIO Socket + ThreadPool 模式与 NIO 选择器模式
- python - C++ 在 Anaconda3 中调用 Python 错误:ModuleNotFoundError: No module named 'zlib'