JPA/Hibernate映射我有兩個表:與@SecondaryTable註釋
part {
int id; --> primary key, auto generated
varchar poNo;
varchar partNo;
varchar partDesc;
varchar eccNo;
...
}
supplement {
int id; --> primary key
varchar poNo; --> foreign key
varchar partNo; --> foreign key
varchar venderPartNo;
varchar exportHSCCode;
...
}
我定義一個實體,如下:
@Entity
@Table(name="part")
@SecondaryTable(name="supplement", pkJoinColumns ={@PrimaryKeyJoinColumn="id"})
public class Part{
@Id
@GeneratedValue
private Integer id;
private String poNo;
private String partNo;
private String partDesc;
private String eccNo;
@Column(table="supplement")
private String vernderPartNo;
@Column(table="supplement")
private String exportHSCCode;
...
getter and setter...
}
問題1:
當我堅持一個部分,我不想在補充表中插入一行,是否有任何配置或註釋可以得到它?因爲根據上述實體和配置,當我堅持一個部分,Hibernate會生成對我來說兩個插入SQL語句:
insert into part(poNo, partNo, partDesc, eccNo) values (?,?,?,?)
insert into supplement(vernderPartNo, exportHSCCode, id) vaules (?,?,?)
,我想是,堅持一個部分的時候,我沒有對任何申請設定值補充的,那麼只有一個INSERT語句:(?,?,?,) INSERT INTO部分(PONO,PARTNO,partDesc,eccNo)值
這可能嗎?
問題2:
從上面的表架構中,PONO和PARTNO是外鍵,這意味着,每一個相關的部分和補充,這兩個場應該具有相同的值。但是我不知道如何在使用上面的配置時將這兩列值映射到補充表。
對於Hibernate的正常運行,當它處理一個部分時,它總是生成兩個我上面提到的insert語句,而對於secondary表,它的insert語句只包含那些指定了它的表名的字段,所以爲補充,它的INSERT語句:
insert into supplement(vernderPartNo, exportHSCCode, id) vaules (?,?,?)
那麼,有沒有有什麼辦法可以讓Hibernate生成如下插入語句:
insert into supplement(poNo, partNo, vernderPartNo, exportHSCCode, id) vaules (?,?,?,?,?)
對於第一個問題,我在之前的測試中犯了一個錯誤,並且我發現使用@SecondaryTable已經可以解決它,只是沒有爲補充表設置任何字段的值,然後hibernate會跳過插入記錄到這個表。 – Aaron 2014-11-11 11:09:16