Hibernate创建不需要的映射表

时间:2014-10-25 05:58:33

标签: java hibernate junit hibernate-mapping derby

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

@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个表。

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

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

1 个答案:

答案 0 :(得分:3)

你得到这个的原因是因为你有 卖家和卖家促销实体之间的许多关系。 并且建立多对多关系的唯一方法是使用连接表。 这就是为什么hibernate将创建一个名为SELLER_SELLER_PROMOTION的表 根据你的情况有两列。 每个都是各个表的外键。

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