我有2個表vanTb和vanSiteTb。 vanTb的主鍵是vId。 vanSiteTb具有2列的複合主鍵,即, vNum和vSiteC。如何在休眠狀態下的複合鍵2個表之間進行一對一映射?
vanTb也有2列vNum和vSiteC。
這兩張表之間有一對一的關係。
數據庫模式來自遺留數據庫,因此無法更改。
在hibernate中,我定義了2個實體bean, VanTb.java和VanSiteTb.java。
對於VanSiteTb.java,我使用@Embeddable定義了一個新的java類。這個類的對象在使用@EmbeddedId的VanSiteTb.java中定義。
現在,我想定義這兩個表之間的一對一關係。
所以,
@Entity
@Table(name = "<name>", schema = "<name>")
public class vanTb implements Serializable{
@Id
@Column(name="vId", insertable = false, updatable = false)
private int vId;
@Column(name="vNum", insertable = false, updatable = false)
private String vNum;
@Column(name="vSiteC", insertable = false, updatable = false)
private String vSiteC;
@OneToOne
@JoinColumn(???)
private vanSiteTb v;
}
@Embeddable
public class PmKey implements Serializable {
@Column(name = "vNum", insertable = false, updatable = false)
private String vNum;
@Column(name = "vSiteC", insertable = false, updatable = false)
private String vsiteC;
....
getter and setter for both properties.
...
}
@Entity
@Table(name = ".vSiteTb", schema="")
public class vSiteTb implements Serializable {
@EmbeddedId
private PmKey pmKey;
@Column(name = "vNum", insertable = false, updatable = false)
private String vNum;
@Column(name = "vSiteC", insertable = false, updatable = false)
private String vSiteC;
public PmKey getPmKey() {
return pmKey ;
}
public void setPmKey (PmKey pmKey) {
this.pmKey = pmKey ;
}
public String getVNum() {
return vNum;
}
public void setVNum(String vNum) {
this.vNum = vNum;
}
public String getVSiteC() {
return vSiteC;
}
public void setVSiteC(String vSiteC) {
this.vSiteC = vSiteC;
}
}
我們定義一個一對一的關係,我必須寫在JPA @OneToOne,但什麼應該@JoinColumn,在那裏我已經提到???寫入。
要從兩個表中標識唯一條目,我們應該使vNum和兩個表的vSite應該相互匹配。
select * from vanTb v, vSiteTb site where
v.vNum = site.vNum and v.SiteC = site.SiteC
and v.vId = 1234
上述查詢將從兩個表中返回一個唯一的行。
請讓我知道解決方案。
我還需要在vanSiteTb中寫@OneToOne嗎?如果是,那麼我也要在vanSiteTb實體bean中定義一個屬性vanTb,對吧? – azaveri7
除非需要通過對象圖回溯到'vanTb',否則不需要在'vanSiteTb'內放置'@ OneToOne'。 – Naros