Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Hibernate如何映射这一点?_Java_Hibernate - Fatal编程技术网

Java Hibernate如何映射这一点?

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)

我仍在努力解决这个问题:

很抱歉重新措辞并重新发布

我的想法一旦付诸实施就根本行不通。最大的问题是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)
     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。如果我为现有活动创建一组新的促销活动,则旧的促销活动不会被替换。我所需要的就是添加和删除一个新的促销集合,就像它是一个普通字段一样。事实上它是。。。但它破坏了审计。。。参见原始问题中的编辑。