我正在创建一个架构。我的架构如下
@Entity
@Table(name = "PROMOTION")
public class Promotion {
@Id
@Column (name = "promotion_id")
private String promotionId;
@JoinColumn(name = "seller_id")
private List<Seller> 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<SellerPromotion> 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;
};
问题是当我执行单元测试时,我观察到的是,而不是3,总共创建了4个表。
我不确定4是如何创建的。它是一个正在创建的映射表。即使我做show sql,我也能看到hibernate在与SELLER_PROMOTION实际连接之前正在与这个表(SELLER_SELLER_PROMOTION)进行连接。
我不知道发生了什么。任何人都可以帮助我理解它为什么会发生以及如何解决这个问题?
答案 0 :(得分:3)
你得到这个的原因是因为你有 卖家和卖家促销实体之间的许多关系。 并且建立多对多关系的唯一方法是使用连接表。 这就是为什么hibernate将创建一个名为SELLER_SELLER_PROMOTION的表 根据你的情况有两列。 每个都是各个表的外键。
如果你真的感兴趣的话。抓住名为Pro JPA的书。 它在capter Object关系映射中精美地解释了这些概念。