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