首先,我对 Hibernate 有点陌生。为了了解我在项目中使用的技术。我正在尝试映射以下数据库:
Campaign
campaignId(+)
name
Promotion
campaignId(+)
discount(+)
product
message
我在这两种情况下都用 (+) 表示主键。 Promotion 中的“campaignId”是 Campaign 的外键,用于建模 1:m 映射(一个 Campaign 有许多 Promotions)。使用注释我不知道如何做到这一点。
我真的不想在促销表中添加促销Id,因为它会使数据处理变得很麻烦。当然,这使得桥接表有点棘手。我在使用同时也是主键一部分的外键时也遇到问题。
这可能有映射吗?
<小时/>好的,我成功了。有点。必须检查坚持是否真的有效。我做了以下事情:
@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;
}
}
Promotion 是一个普通映射(毕竟不使用嵌入),其字段为:campaignId、discount、message。 (它也没有 @ManyToOne 注释。)
这有意义吗?
最后,这将是一等奖:如您所见,我正在使用 Envers 来审核整个事情。上面创建了一个相当丑陋的“CampaignEntity_PromotionEntity_AUD”表。我知道这是必要的,但如何将其重命名为 CAMPAIGN_PROMOTION_AUD 呢?
谢谢大家!
<小时/>我在一个孤独的网站上得到了答案,该网站深深隐藏在 Hibernate 的 Jira 错误跟踪网站的遥远角落:https://hibernate.onjira.com/browse/HHH-3729 .
答案当然是使用@AuditJoinTable(name = "CAMPAIGN_PROMOTION_AUD")。
最佳答案
这是一对多关系及其逆关系的基本示例。
public class Campaign
{
@OneToMany(mappedBy = "campaign)
private List<Promotion> promotions;
}
public class Promotion
{
@ManyToOne
private Campaign campaign;
}
关于java - Hibernate 数据库映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9873413/