Hibernate创建不需要的映射表

我正在创建一个架构。 我的架构如下

@Entity @Table(name = "PROMOTION") public class Promotion { @Id @Column (name = "promotion_id") private String promotionId; @JoinColumn(name = "seller_id") private List sellerList; }; @Entity @Table(name = "SELLER") public class Seller { @Id @Column (name = "seller_id") private String sellerId; @ManyToOne(fetch = FetchType.LAZY) @JoinColumn(name = "promotion_id") private Promotion promotion; @ManyToMany(fetch = FetchType.LAZY) @JoinColumn(name = "seller_id", referencedColumnName = "seller_id") private List sellerList; }; @Entity @Table(name = "SELLER_PROMOTION") public class SellerPromotion { @Id @Column (name = "seller__promotion_id") private String sellerPromotionId; @Column(name = "seller_id") private String sellerId; @Column(name = "product_id") private String productId; }; 

问题是当我执行unit testing时,我观察的是,而不是3,总共创建了4个表。

  1. 促销
  2. 卖方
  3. SELLER_PROMOTION
  4. SELLER_SELLER_PROMOTION

我不确定4.一个是如何创建的。 它是一个正在创建的映射表。 即使我做show sql,我也能看到hibernate在与SELLER_PROMOTION实际连接之前正在与这个表(SELLER_SELLER_PROMOTION)进行连接。

我不知道发生了什么。 任何人都可以帮助我理解它为什么会发生以及如何解决这个问题?

您之所以这样做是因为您的卖家与SellerPromotion实体之间存在ManyToMany关系。 并且建立多对多关系的唯一方法是使用连接表。 这就是为什么hibernate将创建一个名为SELLER_SELLER_PROMOTION的表,并根据您的情况有两列。 每个都是各个表的外键。

如果你真的很感兴趣 抓住名为Pro JPA的书。 它在capter Object关系映射中精美地解释了这些概念。