[英]How to set the foreign key as a primary key in java hibernate
我正在使用java和hibernate批注定義數據庫模式,並希望在一個表中指定外鍵作為主鍵。
設置此功能時出現錯誤,並認為這可能取決於我如何將外鍵設置為主鍵,因為當我使用普通的主鍵時,不會出現錯誤。
將外鍵設置為主鍵的正確方法是什么?
我當前的代碼設置是:
@Table(name="BATCH_STEP_EXECUTION_CONTEXT")
public class BatchStepExecutionContext implements Serializable {
private static final long serialVersionUID = 1L;
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@JoinColumn(name = "STEP_EXECUTION_ID" , columnDefinition="BIGINT NOT NULL", referencedColumnName="STEP_EXECUTION_ID")
@ForeignKey(name="STEP_EXEC_CTX_FK ")
@IndexColumn(name="IDX_STEP_EXEC_CTX")
private BatchStepExecution batchStepExecution;
批處理步驟執行表將其引用為:
// bi-directional many-to-one association to Batch Step Execution Context
@OneToMany(mappedBy = "batchStepExecution", cascade = {CascadeType.ALL})
private List<BatchStepExecutionContext> batchStepExecutionContext;
我在嘗試運行代碼時遇到的錯誤是:
Unable to read the mapped by attribute for batchStepExecutionContext in com.ccs.nbook.domain.model.BatchStepExecutionContext!
我要在Java代碼中建模的表是:
CREATE TABLE BATCH_STEP_EXECUTION
(
STEP_EXECUTION_ID BIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITY (MAXVALUE 9223372036854775807),
VERSION BIGINT NOT NULL,
STEP_NAME VARCHAR (100) NOT NULL,
JOB_EXECUTION_ID BIGINT NOT NULL,
STATUS VARCHAR (10),
COUNT BIGINT,
CONSTRAINT JOB_EXEC_STEP_FK FOREIGN KEY (JOB_EXECUTION_ID) REFERENCES BATCH_JOB_EXECUTION (JOB_EXECUTION_ID),
PRIMARY KEY (STEP_EXECUTION_ID)
)
;
CREATE TABLE BATCH_STEP_EXECUTION_CONTEXT
(
STEP_EXECUTION_ID BIGINT NOT NULL,
SHORT_CONTEXT VARCHAR (2500) NOT NULL,
SERIALIZED_CONTEXT LONG VARCHAR,
PRIMARY KEY (STEP_EXECUTION_ID),
CONSTRAINT STEP_EXEC_CTX_FK FOREIGN KEY (STEP_EXECUTION_ID) REFERENCES BATCH_STEP_EXECUTION (STEP_EXECUTION_ID)
)
;
因此,我試圖對兩個表之間的STEP_EXECUTION_ID關系進行建模,其中它是BATCH_STEP_EXECUTION中的主鍵,並且是BATCH_STEP_EXECUTION_CONTEXT中的主鍵和外鍵
不太確定您的意思是
想要在一個表中指定外鍵作為主鍵。
不清楚您的意思是什么...這個外鍵已經是主鍵了,對吧?
無論如何,要知道發生了什么(不僅在這種情況下),請閱讀Exception
:
原因:org.hibernate.MappingException: 無法讀取com.domain.model.BatchJobExecutionContext中batchJobExecutionContext的按屬性映射 !
它說: BatchJobExecutionContext中缺少一個mapbyby!
如何解決?
通過一個簡單的示例閱讀此答案 :
@Entity
public class Company {
@OneToMany(fetch = FetchType.LAZY, mappedBy = "company")
private List<Branch> branches;
}
@Entity
public class Branch {
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "companyId")
private Company company;
}
我可以看到你缺少@ManyToOne
關系的側@OneToMany
和它mappedby
屬性。 只要您使用過: @OneToMany(mappedBy = "batchStepExecution", cascade = {CascadeType.ALL})
您就必須在另一側添加@ManyToOne
注釋。 因此,您的代碼需要像這樣:
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@ManyToOne(fetch = FetchType.LAZY)
@JoinColumn(name = "STEP_EXECUTION_ID" , columnDefinition="BIGINT NOT NULL", referencedColumnName="STEP_EXECUTION_ID")
@ForeignKey(name="STEP_EXEC_CTX_FK ")
@IndexColumn(name="IDX_STEP_EXEC_CTX")
private BatchStepExecution batchStepExecution;
筆記:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.