我正在创建一个架构。我的架构如下
@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;
};
问题是当我执行单元测试时,我观察到创建了总共 4 个表而不是 3 个表。
- 促销
- 卖家
- SELLER_PROMOTION
- SELLER_SELLER_PROMOTION
我不确定 4. one 是如何创建的。这是一个正在创建的映射表。即使当我执行 show sql 时,我也能够看到在实际加入 SELLER_PROMOTION 之前,hibernate 正在与该表 (SELLER_SELLER_PROMOTION) 进行连接。
我不知道发生了什么。谁能帮我理解为什么会这样以及如何解决这个问题?
最佳答案
你得到这个的原因是因为你有 您的 Seller 和 SellerPromotion 实体之间的多对多关系。 建立多对多关系模型的唯一方法是连接表。 这就是为什么 hibernate 会创建一个名为 SELLER_SELLER_PROMOTION 的表 并根据您的情况有两列。 每个都是各自表的外键。
如果你真的有兴趣。获取名为 Pro JPA 的书。 它在 capter 对象关系映射中很好地解释了这些概念。
关于java - Hibernate 创建不需要的映射表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26559731/