首先,我对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