Java Hibernate如何映射这一点?
我仍在努力解决这个问题: 很抱歉重新措辞并重新发布 我的想法一旦付诸实施就根本行不通。最大的问题是PK/FK字段似乎不兼容。以下是我想到的两张桌子:Java Hibernate如何映射这一点?,java,hibernate,Java,Hibernate,我仍在努力解决这个问题: 很抱歉重新措辞并重新发布 我的想法一旦付诸实施就根本行不通。最大的问题是PK/FK字段似乎不兼容。以下是我想到的两张桌子: Campaign PK Long campaignId String description Promotion PK Long campaignId (FK to Campaign) PK Long discount (unique set of discounts for the campaign)
Campaign
PK Long campaignId
String description
Promotion
PK Long campaignId (FK to Campaign)
PK Long discount (unique set of discounts for the campaign)
String messgge
每个活动都有许多促销活动
问题是,没有活动对象,促销就不可能存在。使用PromotionID是非常乏味的。我真正需要的是在对象模型中有一个活动对象,我只需访问与之关联的促销集。每个促销活动都有一个折扣和一条与之相关的信息。如下所示:
class Campaign {
Long campaignId;
String description;
Set<Promotion> promotions;
// constructors, getters, setters
}
class Promotion {
int discount;
String message;
// constructors, getters, setters
}
这有可能吗?我如何使用Hibernate和标准JPA注释来映射它?只要我可以拥有上面描述的对象模型,我就不再太关心表映射了
请
编辑
我在升级端使用@ElementCollection,并将升级从@Entity更改为@Embeddeble。这工作得很好,正是我需要的。然而,现在审计中断了,因为enver拒绝处理列表
我知道促销表中的活动ID和折扣是唯一的,但我如何告诉Envers这一点?在活动类中,您可以在最简单的情况下使用以下方法映射促销集:
@OneToMany(mappedBy = "promotions")
public Set<Promotoion> getPromotions() {
return promotions;
}
关于如何使用@OneToMany,请参阅或。您的表中有PK长折扣和int折扣;在你们班,哪个是正确的?更准确地说:折扣意味着什么?它是促销的ID还是其他表格的参考号,还是某种价值,比如百分比折扣?谢谢你的提问。每个具有唯一活动ID的活动都会提供许多具有不同折扣的促销活动。例如,活动1可以提供10%、25%和66%的促销。没有活动,促销就不可能存在。因此,在表格促销中,活动ID和折扣的组合将是唯一的,即另一个活动可能提供相同的折扣。。。但可能每个人都有不同的信息。看看我上面的桌子。这更有意义吗?@ElementCollection有可能做到这一点吗?标准映射的问题是,我需要在升级类中使用PKs。如果我为现有活动创建一组新的促销活动,则旧的促销活动不会被替换。我所需要的就是添加和删除一个新的促销集合,就像它是一个普通字段一样。事实上它是。。。但它破坏了审计。。。参见原始问题中的编辑。