首先,我對Hibernate有點新。要了解我在一個項目中使用它的技術。我試圖映射以下數據庫:休眠數據庫映射
Campaign
campaignId(+)
name
Promotion
campaignId(+)
discount(+)
product
message
我已經在(+)兩種情況下指出了主鍵。 Promotion中的'campaignId'是Campaign建立1:m映射模型的外鍵(一個Campaign有許多促銷活動)。使用註釋我堅持如何做到這一點。
我真的不想在Promotion表中添加promotionId,因爲它使得數據繁瑣。這當然會使橋接表有點棘手。我也遇到了使用也是主鍵一部分的外鍵的問題。
是否可以完成這一映射?
好的,我得到了它的工作。有點。必須檢查持久性是否真的有效。我做了以下內容:
@Entity
@Table(name = "CAMPAIGNS")
@Audited
public class CampaignEntity {
private int campaignId;
private String name;
private List<PromotionEntity> promotions;
public CampaignEntity(int campaignId, String name) {
this.campaignId = campaignId;
this.name = name;
}
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "cmp_id")
public int getCampaignId() {
return campaignId;
}
public void setCampaignId(int campaignId) {
this.campaignId = campaignId;
}
// Campaign name here... left out to save space
@OneToMany
@JoinColumn(name = "cmp_id")
public List<PromotionEntity> getPromotions() {
return promotions;
}
public void setPromotions(List<PromotionEntity> promotions) {
this.promotions = promotions;
}
}
推廣是香草映射(不使用後,所有的嵌入式),與字段:CAMPAIGNID,折扣,消息。 (它也沒有@ManyToOne批註。)
這有道理嗎?
最後,這將是一等獎:你可以看到我正在使用Envers審計整個事情。上面創建了一個相當醜陋的「CampaignEntity_PromotionEntity_AUD」表。我知道這是必要的,但我怎樣才能將它重命名爲CAMPAIGN_PROMOTION_AUD?
謝謝你們!
我得到了一個孤獨的網站深深地隱藏在Hibernate的吉拉錯誤跟蹤網站的遠角落的答案:https://hibernate.onjira.com/browse/HHH-3729。
答案當然是使用@AuditJoinTable(name =「CAMPAIGN_PROMOTION_AUD」)。
您的意思是您可能不希望在* Campaign *表格中使用promotionId?我不確定這是否合理。 – 2012-03-26 14:05:02
更正後,廣告系列ID應作爲單個列(cmp_id)存儲在促銷表中,該列也是促銷主鍵的一部分。 (見上)。我想我已經與上面編輯的解決方案,謝謝你的幫助。 – 2012-03-26 16:46:46