Во-первых, я немного новичок в Hibernate. Чтобы узнать технологию, которую я использую в проекте. Я пытаюсь сопоставить следующую базу данных:
Campaign
campaignId(+)
name
Promotion
campaignId(+)
discount(+)
product
message
Я указал первичный ключ в обоих случаях с помощью (+). «ИД кампании» в Промоушене - это внешний ключ Кампании, предназначенный для моделирования отображения 1: м (Кампания имеет много Акции). Используя аннотации, я застрял на том, как это сделать.
Я не хочу добавлять идентификатор продвижения в таблицу «Продвижение», поскольку это затрудняет работу с данными. Это, конечно, делает соединительный стол немного сложным. У меня также возникают проблемы при работе с внешним ключом, который также является частью первичного ключа.
Возможно ли вообще отображение для этого?
Хорошо, у меня все получилось. Вроде, как бы, что-то вроде. Нужно проверить, действительно ли постоянство работает. Я сделал следующее:
@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, discount, message. (Он также не имеет аннотации @ManyToOne.)
Имеет ли это смысл?
Наконец, и это будет первый приз: как вы можете видеть, я использую Envers для аудита всего этого. Вышеприведенное создает довольно некрасивую таблицу «CampaignEntity_PromotionEntity_AUD». Я понимаю, что это необходимо, но как я могу переименовать его в CAMPAIGN_PROMOTION_AUD, а точнее?
Спасибо, ребята!
Я получил ответ на одиноком веб-сайте, глубоко спрятанном в дальних уголках веб-сайта отслеживания ошибок Jira в Hibernate: https://hibernate.onjira.com/browse/HHH-3729.
Ответ заключается в использовании @AuditJoinTable (name = "CAMPAIGN_PROMOTION_AUD"), конечно.