是否可以在我的物體中定義復合主鍵,但 2 個 ID 是 @OneToOne 欄位?我試圖用@PrimaryKeyJoinColumn 注釋來做,但沒有成功
public class EmployeeEntity {
// my composite ID must be person_id department_id
@OneToOne
//@PrimaryKeyJoinColumn(name = "person_id")
private PersonEntity person;
@OneToOne
//@PrimaryKeyJoinColumn(name = "department_id")
private DepartmentEntity department;
// other fields
我絕對可以用兩個數字欄位的經典方式來完成,但我想設定一個 OneToOne 關系。
實際上,DB 模式應該是這樣的:
create table EMPLOYEE
(
PERSON_ID INT not null,
DEPARTMENT_ID INT not null,
constraint EMPLOYEE_PK
primary key (PERSON_ID, DEPARTMENT_ID),
constraint EMPLOYEE_PERSON_ID_FK
foreign key (PERSON_ID) references PERSON (ID),
);
uj5u.com熱心網友回復:
我相信您需要一個可嵌入的復合鍵:
@Entity
public class EmployeeEntity extends BaseEntity {
@Embeddable
static class Pk implements Serializable {
@OneToOne
@JoinColumn(name = "PERSON_ID")
private PersonEntity person;
@OneToOne
@JoinColumn(name = "DEPARTMENT_ID")
private DepartmentEntity department;
}
@Id
private final Pk id;
public EmployeeEntity(DepartmentEntity department, PersonEntity person) {
this.id = new Pk();
this.id.person = person;
this.id.department = department;
}
}
uj5u.com熱心網友回復:
您應該創建一個包含這兩個欄位的新類,該類將成為您的EmployeeEntity.
@Embeddable
public class EmployeeId implements Serializable {
private PersonEntity person;
private DepartmentEntity department;
public EmployeeId() {}
public EmployeeId(PersonEntity person, DepartmentEntity department) {
this.person = person;
this.department = department;
}
// equals() and hashCode() methods should also be implemented here
}
public class EmployeeEntity implements Serializable {
@EmbeddedId
private EmployeeId id;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/375397.html
下一篇:java.lang.NullPointerException:無法呼叫“java.lang.reflect.AccessibleObject.setAccessible(boolean)”,因為“ao
