#spring-boot #hibernate #kotlin #jpa #spring-data-jpa
#весенняя загрузка #спящий режим #kotlin #jpa #spring-data-jpa
Вопрос:
Мы реструктурируем наши сервисы и наши данные. У нас есть 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
entity, у нас есть 3-я таблица, которая имеет сопоставление между сотрудниками и центрами затрат по имени employee_cost_centers
.
таблица employee_cost_centers
| cost_center_id | employee_id |
|----------------|-------------|
| 10 | 1 |
| 20 | 2 |
| 30 | 3 |
| 40 | 4 |
Теперь мы хотим переместить центры затрат в собственную микросервису. Таким cost_centers
образом, таблица также перейдет на новый сервис.
Я хочу сопоставить costCenter
ссылку в Employee
таблице непосредственно с 3-й таблицей сопоставления 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. Любая помощь от экспертов очень ценится.
Ответ №1:
заменить
@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
или вы можете сохранить имя переменной таким же, в соответствии с вашим дизайном